使用ActiveRecord,您可以构建如下查询:
query = MyModel.where(value_one: true)
if (condition)
query.where(value_two: true)
else
query
end
但是,当有多个条件时,我遇到了问题:
query = MyModel.where(value_one: true)
query.where(value_two: true) if condition_two
query.where(value_three: true) if condition_three
query
在这种情况下,它只会检查value_one
是否为真。有趣的是,如果我:
query = MyModel.where(value_one: true)
query.where(value_two: true)
query.where(value_three: true)
然后它会检查value_one
和value_three
是否为真,但不是value_two
。任何人都明白为什么会这样,以及如何让查询子句正确地相互构建?
答案 0 :(得分:2)
当您链接查询或范围时,ActiveRecord会返回另一个具有附加条件的Relation对象;它不会修改原始对象。要修改关系,您需要链接查询并分配结果,例如:
query = MyModel.where(value_one: true)
query = query.where(value_two: true) if condition_two
query = query.where(value_three: true) if condition_three
query
请注意,在您尝试通过to_s
,each
等提取数据之前,查询实际上并未执行。