如何使用 AREL 执行条件 where 子句
Posted
技术标签:
【中文标题】如何使用 AREL 执行条件 where 子句【英文标题】:How can you do a conditional where clause using AREL 【发布时间】:2011-09-07 20:00:37 【问题描述】:如何做一个条件 where 子句?我有一个运行查询的 rake 任务。假设我正在构建这样的查询:
residentials = Residential.where(:is_active => true)
现在,如果我将某个参数传递给 rake 任务,我想添加到 where 子句。我在想这样的事情:
residentials.where(:something_else => true) if param_was_passed
但这只是替换了现有的 where 子句。如何将其添加到现有的 where 子句中?
【问题讨论】:
此参数是否适用于您的Residential
模型中的特定字段?
其实你这里没有使用 arel。
【参考方案1】:
可以链接 where 语句
residentials = Residential.where(:is_active => true)
residentials = residentials.where(:other_thing => true) if param_was_passed
这应该可行。
确保这不是函数调用的最后一行;在这种情况下,将 residentials
变量作为最后一行重复。 (根据@digger69 评论)
【讨论】:
这就是我尝试过的,但没有奏效。我会再次检查并在此处添加输出 这应该可以工作,但如果你依赖从函数返回的 this 则要小心,因为函数返回最后一条语句的值,如果 !param_was_passed 则为 nil【参考方案2】:您可以构建散列,然后将其提供给.where
方法。比如:
h =
h[:is_active] = true
h[:field_x] = true if param_was_passed
residentials = Residential.where(h)
【讨论】:
这种情况下where('created_at > ?', 10.days.ago)
怎么办?以上是关于如何使用 AREL 执行条件 where 子句的主要内容,如果未能解决你的问题,请参考以下文章