0

我有一个用户模型(:名称,:密码,:电子邮件),事件模型(:名称,:等)和兴趣模型(:名称)[>所有单数<]

然后我创建了两个连接表 -> UsersInterests 和 EventsInterests;每个不包含主键,仅分别由 user_id/interest_id 和 event_id/interest_id 组成。[>复数<]

我的模型使用 嵌套的有很多通过插件

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

谁能看到我搞砸了什么?

4

1 回答 1

1

一路上你一定点错了名字。乍一看,我会说您有一个文件或类名称不正确。记住模型名在文件名和类名中都必须是单数的,否则 Rails 不会建立连接。您问题的另一个来源是 belongs_to 的参数也必须是单数的。即使您做对了,当您运行命名范围时,HABTM 与用户的兴趣关系也会引发错误。

我能够使用以下模型解决您的错误。

用户.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

利息.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

事件.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
于 2010-02-15T08:54:39.273 回答