Поиск по виртуальному атрибуту

Я пытаюсь создать полнотекстовый поиск по модели событий. Модель содержит поле country_code, в котором хранится код страны; Я хочу иметь возможность выполнять поиск по стране напрямую, набрав название страны, скажем, Франция вместо Фр.

Мой прицел выглядит так:

pg_search_scope :full_search, against: [:name, :city, :country], associated_against: {
    event_type: [:name],
    dance_types: [:name]
  }

У меня есть деревенский метод

def country
  return '' if country_code.blank?
  country = ISO3166::Country[country_code]
  (country.translations[I18n.locale.to_s] || country.name) unless country.nil?
end

К сожалению, вызов моей области поиска приводит к следующей ошибке:

ActiveRecord :: StatementInvalid: PG :: UndefinedColumn: ОШИБКА: столбец events.country не существует.

Как я могу это исправить?


person user1445685    schedule 24.07.2016    source источник


Ответы (1)


Правильно ли вы выполнили миграцию? Похоже, в вашей базе данных даже нет поля страны, поэтому неудивительно, что она не может выполнять поиск.

$ rake db:migrate VERSION=0
$ rake db:migrate

Вы также могли неправильно связать таблицы в своих моделях. Трудно сказать без всех подробностей, но это выглядит подозрительно column events.country

События должны быть единичными, а страна, вероятно, должна быть полем идентификатора, например column event.country_id. Возможно, вы неправильно соединили таблицы в их моделях или в ваших миграциях могут отсутствовать правильные поля идентификаторов.

# models/events.rb
has_one :country

# models/country.rb
belongs_to :event

Если это не ответ, нам нужна дополнительная информация о ваших миграциях для страны и событий.

person Jeremy E    schedule 24.07.2016
comment
Спасибо за ваш ответ. В моей модели событий нет поля страны рядом с полем country_code. Я использую gem country_select, поэтому мне не нужно хранить полное название страны или иметь отдельную таблицу для стран. Вот почему у меня есть только поле страны contry_code. Роль метода страны - вернуть название страны для заданного country_code. - person user1445685; 25.07.2016