HABTM Отношения и Именованные Области - PullRequest
1 голос
/ 02 февраля 2010

Я уже некоторое время работаю над этим и не могу найти, где там ошибка.

У меня есть модель пользователя (: имя,: пароль,: электронная почта), модель события (: имя,: и т. Д.) И модель интереса (: имя) [> все в единственном числе <] </p>

Затем я создал две таблицы соединения -> UsersInterests и EventsInterests; каждый из которых не содержит первичного ключа и состоит только из user_id / Interest_ID и Event_ID / Interest_id соответственно. [> Множественный <] </p>

Мои модели содержат отношения HABTM следующим образом

user.rb => has_and_belongs_to_many :interests
event.rb => has_and_belongs_to_many :interests
interest.rb => has_and_belongs_to_many :users
               has_and_belongs_to_many :events
events_interests.rb => has_and_belongs_to_many :interests
                       has_and_belongs_to_many :events
users_interests.rb => has_and_belongs_to_many :users
                      has_and_belongs_to_many :interests

Вот так ... Итак, я хотел создать named_scope для поиска всех событий, которые представляют интерес для определенного пользователя. Вот код, с которым мне кто-то помог.

named_scope :shares_interest_with_user, lambda {|user| { :joins => "LEFT JOIN
              events_interests ei ON ei.event_id = Event.id " +
             "LEFT JOIN users_interests ui ON ui.interest_id = ei.interest_id",
           :conditions => ["ui.user_id = ?", user]  }}

Когда я бегу от контроллера =>

  @user = User.find(1) 
  @events = Event.shares_interest_with_user(@user)

Я получаю сообщение об ошибке SQL: «нет такого столбца: Event.id: ВЫБЕРИТЕ« события ». * ИЗ« событий »ВЛЕВО СОЕДИНЯЕТ events_interests 1016 *

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

1 Ответ

2 голосов
/ 02 февраля 2010

Я предлагаю отойти от HABTM и вместо этого использовать has_many :through.

Вот отличное сообщение в блоге , объясняющее разницу, написанную пользователем SO Хайме Беллмиер .

...