我有一个用户模型(:姓名,:密码,:电子邮件),和事件模型(:姓名,:等)和兴趣模型(:名称)

然后我创建了两个连接表 - > 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(...)该名单了。我不知道怎么会更快是,虽然。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top