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

我还没有测试过这个,但是上面的代码会让你走上正确的道路。