嵌套有许多通过插件和命名范围
-
24-09-2019 - |
题
我有一个用户模型(:姓名,:密码,:电子邮件),和事件模型(:姓名,:等)和兴趣模型(:名称)[>所有奇异<]
然后我创建了两个连接表 - > 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
任何人都可以看到我搞砸了?
解决方案
您必须命名沿途一些错误。我一眼说你有一个名为不正确的文件或类。记住型号名称必须始终是奇异的,无论是在文件和类名,否则Rails会不会进行连接。你的问题的另一个原因是,参数belongs_to的也必须是单数。就算你得到了正确的事情,当你运行了一个名为范围中的利益关系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
不隶属于 StackOverflow