我有一个关于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)。这会中断)。我基本上是尝试在递归到arel和to_sql函数的update_all调用中执行代码块。这是可能的吗?
发布于 2021-12-06 15:32:51
您只需要将nil传递给eq
table[attr].eq(nil)它会生成where attr is not null
发布于 2019-03-15 20:20:45
我知道要做这样的事情的唯一方法是使用SqlLiteral,类似于:
table[attr].eq(Arel::Nodes::SqlLiteral.new("NULL"))这将迫使arel跳过nil的处理器,并创建一个简单的相等
https://stackoverflow.com/questions/13067573
复制相似问题