我正在尝试从我的数据库中检索一个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 表的内容。此外,用户和域之间的关联是一对多的(这可能使事情进一步复杂化)。
有关如何形成此查询的任何想法?
答案 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"})
很抱歉这长串代码的格式化