Поиск солнечных пятен имеет одну ассоциацию, другая модель не имеет внешнего ключа

Я использую Sunspot Solr для поиска событий, и каждое событие имеет group_id, который ссылается на объект Group (несколько событий могут иметь одну и ту же группу). Я хочу найти правильные события, если пользователь ищет имя группы.

Попытка решения в доступном для поиска блоке

string :events_group_name do
  group.map(&:name)
end

Ошибка

SQLite3::SQLException: нет такого столбца: groups.event_id: SELECT "groups".* FROM "groups" WHERE "groups"."event_id" = 3 LIMIT 1

Проблема в том, что в группе нет event_id, так как я могу заставить это работать? Обходной путь — сохранить имя группы в виде столбца в объекте Event, но, безусловно, есть и лучший способ. Спасибо!


person Andrew    schedule 11.03.2013    source источник


Ответы (1)


Я ничего не знаю о Sunspot, но я считаю, что ваша модель неправильно нанесена на карту. Если у вас есть ассоциация типа:

1 группа -> N событий

Вы должны использовать has_many и belongs_to в своей модели. has_one используется только с ассоциациями от 1 до 1. В вашем случае:

class Group
  has_many :events
  #...
end

class Event
  belongs_to :group
  #...
end

В Rails Guide есть хорошая статья об ассоциациях Active Record с примерами. Вы можете взглянуть на это.

person Pigueiras    schedule 11.03.2013
comment
Благодаря тонну! Я понял это, сначала мы меняем его на own_to в соответствии с вашим предложением (глупый, глупый я), а затем в доступном для поиска блоке добавляем текст: group do group.name, если группа заканчивается (чтобы проверить, является ли группа нулевой) - person Andrew; 11.03.2013