2010-02-02 4 views
0

У меня есть модель пользователя (: name,: password,: email) и модель события (: name,: etc) и интересная модель (: name) [> all singular <]Вложенные много через плагин и именованные области

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

Мои моделей Используйте Nested Has Many Through Plugin

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 

Whew..ok Так что я хотел создал 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 

Может кто-нибудь увидеть, что я испортил?

ответ

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_int erest.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