1

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

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

我正在尝试使用 ActiveRecord 查询所有事件的列表,其中 EventsInterests 的 interest.id=UsersInterests 的 interest.id

我正在使用 has_many 和 belongs_to 与嵌套循环插件的关系

我的模型看起来像这样 =>

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

4

1 回答 1

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() 。不过,我不确定它会快多少。

于 2010-02-03T02:21:48.003 回答