使用 ActiveRecord 查找 5 个嵌套表的结果
Posted
技术标签:
【中文标题】使用 ActiveRecord 查找 5 个嵌套表的结果【英文标题】:Use ActiveRecord to Find Result of 5 Nested Tables 【发布时间】:2010-02-03 00:52:16 【问题描述】:我有一个用户模型(:name, :password, :email),以及事件模型(:name, :etc) 和兴趣模型(:name)
然后我创建了两个连接表 -> UsersInterests 和 EventsInterests;每个不包含主键,仅分别由 user_id/interest_id 和 event_id/interest_id 组成。
我正在尝试使用 ActiveRecord 查询所有事件的列表,其中 EventsInterests 的 interest.id= UsersInterests 的 interest.id
我正在使用 has_many 和 belongs_to 与 Nested Loop Plugin 的关系
我的模型看起来像这样 =>
用户.rb
has_many :users_interests
has_many :interests, :through => :users_interests
事件.rb
has_many :events_interests
has_many :interests, :through => :events_interests
兴趣.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= User.find(1),我将如何查询用户感兴趣的事件?
我想出了这个 => @events.find(:all, :conditions => EventsInterests.interest_id = UsersInterests.interest_id) ??
但我得到了错误
undefined method `interest_id' for UsersInterests(user_id: integer, interest_id: integer):Class
嗯..wtf?任何帮助家伙....我已经在这个 4 天了
【问题讨论】:
【参考方案1】:首先,进入控制台并确保您的所有关系都有效:
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,并将其传递给带有interest_id IN(...)
列表的find()。不过,我不确定它会快多少。
【讨论】:
以上是关于使用 ActiveRecord 查找 5 个嵌套表的结果的主要内容,如果未能解决你的问题,请参考以下文章
按指定顺序按 id 查找 ActiveRecord 对象的干净方法
如何使用 ActiveRecord :: 嵌套属性进行多重关联