2017-01-27 8 views
1

に、私は次のモデルを持っていますRailsのカスタム複数のテーブル関係

class Girl < User 
    has_many :photos, dependent: :destroy 
    has_one :info, :dependent => :destroy 
end 

class Photo < ActiveRecord::Base 
    belongs_to :girl 
end 

class Info < ActiveRecord::Base 
    belongs_to :girl 
end 

私は写真を使用してクエリを行う必要があり、私も女の子についての情報を取得する必要があると私は熱心な負荷情報にしたいですその女の子のために(それはすべての女の子がそれを持っていることは必須ではありません)。

私はPhoto.joins(:girl).includes(:info)に似た何かをしたいが、私はそれを実行しようとするとき、それは(明らかに)このエラーの原因となって、フォトテーブルに情報を関連付けるために試してみてください。

ActiveRecord::AssociationNotFoundError: Association named 'info' was not found on Photo; perhaps you misspelled it? 

どのように私はこのカスタムには、することができます複数のテーブルのクエリで?

EDIT

は私がPhoto.joins(:girl).includes(:girl => :ad_info).where("photos.approved = 1 and users.profile_approved = 1") を使用して、それを解決したと思いますが、私は、コンソールをチェックしたとき、私は私が持っているべきではないad_infoクエリがたくさんあります。

どうすればこの問題を解決できますか? queries that I should not have

答えて

0

これは必要なのですか?

girl.photos.where.not(info: nil) 
+0

私は写真で質問しなければならないので、これは私のニーズに合っていません。私は主な問題を解決したと思うが、役に立たないクエリはまだそこにある。私の編集を確認してください –

+0

あなたの質問ではないことを知っています。しかし、なぜ別の情報モデルを使用するのですか、Girlモデルとの1対1の関係です。情報テーブルの列を少女テーブルに追加するだけで、はるかに簡単です。 –

+0

私はこれを行うことにしました。なぜなら、女の子の2%未満がその追加情報テーブルを持つため、私はヌルの列をたくさん避けたかったからです。あなたはそれについてどう思いますか? –

関連する問題