Вложенный имеет много через плагин и именованные области

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

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

В моих моделях используется вложенный подключаемый модуль Has Many Through

user.rb => has_many :users_interests
 has_many :interests, :through => :users_interests
 has_many :events_interests, :through => :interests
 has_many :events, :through => :events_interests

event.rb => has_many :events_interests
  has_many :interests, :through => :events_interests
     has_many :users_interests, :through => :interests
  has_many :users, :through => :users_interests

interest.rb => has_and_belongs_to_many :users
               has_and_belongs_to_many :events

events_interests.rb => belongs_to :interests
                    belongs_to :events
users_interests.rb => belongs_to :users
                   belongs_to :interests

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

named_scope :shares_interest_with_users, lambda {|user|
{ :joins => :users_interests,
  :conditions => {:users_interests => {:user_id => user}}
   }}

Когда я запускаю с контроллера =>

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

Я получаю сообщение об ошибке:

uninitialized constant Event::EventsInterest

Кто-нибудь может увидеть, что я напутал?


person ChrisWesAllen    schedule 02.02.2010    source источник


Ответы (1)


Вы, должно быть, назвали что-то неправильно по пути. На первый взгляд я бы сказал, что у вас неправильно назван файл или класс. Помните, что имена моделей ДОЛЖНЫ всегда быть в единственном числе, как в именах файлов, так и в именах классов, иначе Rails не установит соединение. Еще один источник вашей проблемы заключается в том, что аргументы принадлежности_то также должны быть в единственном числе. Даже если бы вы все сделали правильно, отношения HABTM в интересах пользователей вызвали бы ошибку при запуске именованной области.

Мне удалось решить вашу ошибку со следующими моделями.

user.rb

class User < ActiveRecord::Base
has_many :users_interests
  has_many :interests, :through => :users_interests
  has_many :events_interests, :through => :interests
  has_many :events, :through => :events_interests
end

users_interest.rb

class UsersInterest < ActiveRecord::Base
  belongs_to :user
  belongs_to :interest
end

interest.rb

class Interest < ActiveRecord::Base 
  has_many :users,:through => :users_interests
  has_many :users_interests
  has_many :events_interests
  has_many :events, :through => :events_interests
end

**events_interest.rb

class EventsInterest <ActiveRecord::Base
  belongs_to :interest
  belongs_to :event
end

event.rb

class Event <ActiveRecord::Base 
  has_many :events_interests
  has_many :interests, :through => :events_interests
  has_many :users_interests, :through => :interests
  has_many :users, :through => :users_interests


  named_scope :shares_interest_with_users, lambda {|user|
    { :joins => :users_interests,
      :conditions => {:users_interests => {:user_id => user}}
    }
  }

end
person EmFi    schedule 15.02.2010