使用ActiveRecord查找的5个嵌套表结果
-
25-09-2019 - |
题
我有一个用户模型(:姓名,:密码,:电子邮件),和事件模型(:姓名,:等)和兴趣模型(:名称)
然后我创建了两个连接表 - > UsersInterests和EventsInterests;每个不包含一个主键,并且只包括该USER_ID / interest_id和的event_id / interest_id分别
的我试图使用ActiveRecord来查询列表中的所有事件,其中EventsInterests = UsersInterests的interest.id的interest.id
我使用的has_many和belongs_to的与嵌套循环插件
的关系我的模型看起来像这样=>
user.rb
has_many :users_interests
has_many :interests, :through => :users_interests
event.rb
has_many :events_interests
has_many :interests, :through => :events_interests
interest.rb
belongs_to :users , :through => :users_interests
belongs_to :events , :through => :events_interests
users_interests.rb
belongs_to :users
belongs_to :interests
events_interests.rb
belongs_to :interests
belongs_to :events
如果该用户@ = User.find(1)中,如何将查询用户将感兴趣的事件?
我想出了这个=> @ events.find(:所有,:条件=> EventsInterests.interest_id = UsersInterests.interest_id)...
但我得到的错误
undefined method `interest_id' for UsersInterests(user_id: integer, interest_id: integer):Class
umm..wtf?任何帮助球员....我已经在本作样4天
解决方案
首先,跳进控制台,并确保所有关系的工作:
User.first.events
User.first.interests
Events.first.users
Interests.first.users
Interests.first.events
# ... and so
我想弄清楚,一个用户列表他的兴趣,并希望得到匹配这些利益的事件的列表?
User.first.interests.collect { |interest| interest.events }.uniq
不特别有效,但是有效和容易理解。
您可以使用User.first.interests_singular_ids
获得的ID并传递到find()方法与interest_id IN(...)
该名单了。我不知道怎么会更快是,虽然。
不隶属于 StackOverflow