获得加入2个表的记录

时间:2011-12-23 03:10:08

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

好的,所以我在Rails 3.1中有一个简单的has_many:through关系

class Event < ActiveRecord::Base
  has_many :invites

  [...]
end

class Account < ActiveRecord::Base
  has_many :invites
  has_many :events, :through => :invites

  [...]
end

class Invite < ActiveRecord::Base
  belongs_to :account
  belongs_to :event

  [...]
end

获取我所做的所有用户事件

@events = current_account.events

如何在不运行每个事件的查询的情况下获取加入两个表(即邀请行)的记录?或者我需要引用Invite记录中的至少一列?

使用:include =&gt; :邀请包括每个事件的所有邀请。我只需要连接完成的那个。我搜索谷歌,找不到任何东西。我觉得这应该是一件很简单的事情。我错过了什么?

1 个答案:

答案 0 :(得分:2)

只需从另一方获取它们:

Event
  .includes ( :invites => :account )
  .where    ( :invites => {:accounts => {:id => current_account.id }} )

注意,在where子句中,符号必须是复数(表名),而在includes子句中,符号表示关联(复数如果has_many,单数如果belongs_to 1}})。顺便说一句,根据铁路惯例,您的Invites模型应该是单数(Invite)。