1

當使用嵌套包含關聯時,我必須在where子句中使用OR。 我有一個ActiveRecord查詢,如下所示:或者在where子句中使用嵌套時包含或與連接關聯

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

在where子句中使用,爲所有條件。 但我想使用或過去的兩個條件,是這樣的:

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

首先,很多不同版本的rails標籤都是你實際運行的版本。這是說你必須使用字符串的地方或部分。什麼是不工作關於這其他比你可能缺少一些parens – engineersmnky

+0

你實際使用什麼Rails版本?請清理標籤。 –

+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))) 

我還沒有測試過這個,但是上面的代碼會讓你走上正確的道路。