activerecord通过关联找到

时间:2011-01-04 14:13:20

标签: ruby-on-rails activerecord has-many-through

我正在尝试从我的数据库中检索一个activerecord对象。我的模特是

class User < ActiveRecord::Base
   belongs_to :account
   has_many :domains, :through => :account    
end

class Account < ActiveRecord::Base
   has_many :domains
   has_many :users
end

class Domain < ActiveRecord::Base
   belongs_to :account
end

现在我想根据用户名和域名检索用户(假设这些是User和Domain类的属性)。

中的某些内容
User.find(:first, :conditions =>{:username => "Paul", :domains => { :name => "pauls-domain"}})

我知道上面的代码不起作用,因为我不得不提一下 domains 表的内容。此外,用户和域之间的关联是一对多的(这可能使事情进一步复杂化)。

有关如何形成此查询的任何想法?

2 个答案:

答案 0 :(得分:12)

如果您使用的是Rails 3.x,则以下代码将获得查询结果:

User.where(:username => "Paul").includes(:domains).where("domains.name" => "paul-domain").limit(1)

要检查发生的情况,您可以将.to_sql附加到上面的代码中。

如果你正在使用Rails 2.x,你最好编写原始的sql查询。

答案 1 :(得分:5)

下面的代码完成了这个诀窍:

User.joins(:account).joins('INNER JOIN "domains" ON "accounts"."id" = \
"domains"."account_id"').where(:users => {"username" => "Paul"}).
where(:domains => {"name" => "paul-domain"})

很抱歉这长串代码的格式化