4

我对 arel 有疑问:我想使用 Arel 强制执行类似“attr = NULL”的操作。Arel 允许我做这样的事情:

table = obj.arel_table # obj has attr
table[:attr].eq(nil) # returns ''objs'.'attr' IS NULL'

这是公平的,因为在查询中这是正确的做法。但是在更新时,我希望能够将某些内容设置为 NULL,并且最好不必自己编写 SQL(AR 中的 update_all 不支持集合上的类似 ARel 的功能:objs.things.update_all(:created_at => nil )。这打破了)。我基本上是在尝试在 update_all 调用中重复执行 arel 和 to_sql 功能的代码块。这可能吗?

4

2 回答 2

1

你只需要传递nileq

table[attr].eq(nil)

产生where attr is not null

于 2021-12-06T15:32:51.063 回答
-1

我知道做这样的事情的唯一方法是使用 SqlLiteral 类似的东西:

table[attr].eq(Arel::Nodes::SqlLiteral.new("NULL"))

这将迫使 arel 跳过处理器nil并进行简单的相等

于 2019-03-15T12:20:45.137 回答