Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 或在使用嵌套包含或关联联接时在where子句中_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 4_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails 或在使用嵌套包含或关联联接时在where子句中

Ruby on rails 或在使用嵌套包含或关联联接时在where子句中,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,ruby-on-rails-3.2,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,Ruby On Rails 3.2,当使用关联的嵌套包含时,我必须在where子句中使用OR。 我有一个ActiveRecord查询,如下所示: Inventory.includes(:category,:inventory_tiers,:modifiers=>[:modifier_measures,:modifier_tiers]) .where( :categories => { category_tag: 'Dry'}, :location_id =>12, :invento

当使用关联的嵌套包含时,我必须在where子句中使用OR。 我有一个ActiveRecord查询,如下所示:

  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子句使用和,适用于所有条件。 但我想在最后两个条件中使用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")
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)))
但它不起作用。
如何重写语法?

如前所述,在不知道您使用的Rails的实际版本的情况下,我假设它是Rails 3。。。在这种情况下,我建议使用Arel。比如:

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

我还没有对此进行测试,但上面的内容应该会让您走上正确的道路。

如前所述,在不知道您正在使用的Rails的实际版本的情况下,我假设它是Rails 3。。。在这种情况下,我建议使用Arel。比如:

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

我还没有对此进行测试,但上面的内容应该会让您走上正确的道路。

首先,有很多不同版本的rails标签,您实际运行的是哪个版本。也就是说,您必须使用字符串where来表示或部分。除了您可能缺少一些参数之外,还有什么是不起作用的?您实际使用的Rails版本是什么?请清理标签。什么是“不工作”?错误消息?预期行为?实际行为?首先,有很多不同版本的rails标签,您实际运行的是哪个版本。也就是说,您必须使用字符串where来表示或部分。除了您可能缺少一些参数之外,还有什么是不起作用的?您实际使用的Rails版本是什么?请清理标签。什么是“不工作”?错误消息?预期行为?实际行为?