1

アソシエーションを含むネストされたインクルードで作業する場合、where句でORを使用する必要があります。次のように 私はActiveRecordのクエリを持っている:句が使用され、すべての条件のためにどこORでのネストされたインクルードまたはジョインでアソシエーションを使用して作業する場合のwhere句でのOR

Inventory.includes(:category,:inventory_tiers,:modifiers=>[:modifier_measures,:modifier_tiers]) 
    .where(
    :categories => { category_tag: 'Dry'}, 
    :location_id =>12, 
    :inventory_tiers => {:tier => 1}), 
    modifiers: {category_tag:"Wet"}, 
    modifier_tiers: {tier:1} 
) 

します。 しかし、私が使用したいOR最後の二つの条件、のようなもののために:

Inventory.includes(:category,:inventory_tiers,:modifiers=>[:modifier_measures,:modifier_tiers]).where("categories.category_tag=? AND location_id=? AND inventory_tiers.tier = ? OR modifiers.category_tag=? OR modifier_tiers.tier=?", "Wet",12,1,"Wet",1).select("inventories.id,inventories.name,inventories.photo,inventory_tiers.sell_price, modifiers.id,modifiers.name,modifiers.price,modifier_measures.id as measure_id,modifier_measures.name as measure,modifier_measures.price as measure_price,modifier_measures.measure_value") 

が、その作業はありません。 構文をどのように書き換えることができますか?

+0

まず最初に、さまざまなバージョンのレールタグがたくさんあります。実際にはどのバージョンが実際に動作していますか。その部分には文字列を使用する必要があると言われています。これ以外には何もしていないのですが、おそらく一部の括弧がありません – engineersmnky

+0

あなたが実際に使っているバージョンは何ですか?タグを整理してください。 –

+0

「機能していない」とは何ですか?エラーメッセージ?予想される行動?実際の行動? –

答えて

0

あなたが使っているRailsの実際のバージョンが分からないと、私はそれをRails 3と推測します...もしArelを使うことをお勧めします。ような何か:

Inventory.includes(:category, :inventory_tiers, modifiers: [:modifier_measures, :modifier_tiers]) 
    .where(categories: { category_tag: 'Dry' }, location_id: 12, inventory_tiers: { tier: 1 }) 
    .where(Modifier.arel_table[:category_tag].eq("Wet").or(ModifierTier.arel_table[:tier].eq(1))) 

は、私はこれをテストしていませんが、上記の正しい道にあなたを取得する必要があります。

関連する問題