2011-01-04 12 views
5

私はdbからactiverecordオブジェクトを取得しようとしています。私のモデルは今、私は、ユーザー名に基づいてユーザーを検索したいとドメイン名が(これらはの属性であることを前提としていますactiverecord find through association

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"}}) 

の線に沿って何か。また、ユーザーとドメインの関連付けは1対多です(おそらくさらに複雑になります)。

このクエリはどのように作成する必要がありますか?

+0

のこの長い行のフォーマットについては申し訳ありませんが、あなたのモデル団体が正しいことを確認していますか?彼らはそうではないようです。 – Shreyas

答えて

11

あなたがRailsの3.xを使用している場合は、次のコードは、クエリの結果になるだろう:あなたは上記のコードに.to_sqlを追加することができます何がおこる、検査するには

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

を。

Rails 2.xを使用している場合は、生のSQLクエリを記述することをお勧めします。

+0

あなたのアプローチを試みましたが、正しい結合条件を取得できませんでした。私は生のクエリとarel(はいそれはレール3です)を含む組み合わせを終了しました – Dimitris

+0

これは私がGoogle検索していたものです。手動参照については、以下を参照してください。[ActiveRecord :: QueryMethods#includes](http://apidock.com/rails/ActiveRecord/QueryMethods/includes) **注:**メソッド名を複数形にしてください。単数形は、おそらく[Module#include](http://ruby-doc.org/core-2.2.0/Module.html#method-i-include)を呼び出します。 –

5

次のコードは、トリックをした:

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

コード

関連する問題