你怎么做条件where子句?我有一个运行查询的rake任务。假设我正在构建一个类似的查询:
residentials = Residential.where(:is_active => true)
现在,如果我将某个参数传递给rake任务,我想添加到where子句。我在想这样的事情:
residentials.where(:something_else => true) if param_was_passed
但这只是替换现有的where子句。如何将其添加到现有的where子句中?
答案 0 :(得分:33)
可以链接where语句
residentials = Residential.where(:is_active => true)
residentials = residentials.where(:other_thing => true) if param_was_passed
这应该有效。
确保这不是函数调用的最后一行;在这种情况下,将residentials
变量重复为最后一行。 (根据@ digger69评论)
答案 1 :(得分:20)
您可以构建哈希,然后将其提供给.where
方法。类似的东西:
h = { }
h[:is_active] = true
h[:field_x] = true if param_was_passed
residentials = Residential.where(h)