【发布时间】:2018-03-01 13:56:12
【问题描述】:
我想用 arel_table 增加一个值 我试试这个
update_manager = Arel::UpdateManager.new(ActiveRecord::Base)
i = Arel::Table.new(:items)
update_manager.table(i)
update_manager.where(i[:id].not_eq(id)).
set [ [ i[:order], i[:order] + 1 ] ]
但是 update_manager.to_sql 会返回这个:
"UPDATE \"items\" SET \"order\" = NULL"
我该怎么办?
与
set [ [ i[:order], i[:order] ] ]
我明白了
"UPDATE \"items\" SET \"order\" = \"items\".\"order\""
与
set [ [ i[:order], 1 ] ]
我明白了
"UPDATE \"items\" SET \"order\" = 1 "
【问题讨论】:
-
如果您只想增加一个值,您可以在 SQL 中使用
UPDATE bars SET foo = foo + 1执行此操作。所以像set [ [ i[:order], "order + 1" ] ] -
这样会好很多,因为你不需要知道应用端的值。
-
谢谢!但是
[ [ i[:order], "order + 1" ] ]发送order = 0我有很多where语句,所以我更喜欢Arel作为sql语句where a = ? and b=? and c=? ...
标签: ruby-on-rails ruby-on-rails-4 arel