これは簡単な質問かもしれませんが、私はここで優雅な解決法を見つけるために私の頭を引っ張っているようです。理想的に頼ることなく、クエリーでnil has_oneの関連付けを検索する
class Item < ActiveRecord::Base
has_one :purchase
end
class Purchase < ActiveRecord::Base
belongs_to :item
end
私は、すべてのアイテムのオブジェクトを見つけるためのエレガントな方法を探しています、それに関連付けられた購入オブジェクトを持っていない:私はそれらの間にhas_oneとbelongs_toの関連で、2つのActiveRecordのモデルクラスを持っていますブール値is_purchased
または類似の属性を持つアイテムです。
は、今私が持っている:
それは2つのクエリを実行しています(と購入は大規模なレコードセットすることができる)として、機能しますが、私には非効率ですpurchases = Purchase.all
Item.where('id not in (?)', purchases.map(&:item_id))
。
実行のRails 3.1.0
このリンクは完璧です!参加は私が必要としていたものとほぼ同じですが、上記のどこを '(purchases.item_idがnullです)'と置き換えなければなりません。ありがとう! –
'has_many'または' has_one'を使用している場合、 'Item.join(:purchases) 'を使って実際のクエリを書く必要なしに結合を達成することができます –