Sql 更新\u属性只更新一次
我进入应用程序的rails控制台并执行以下语句:Sql 更新\u属性只更新一次,sql,ruby-on-rails,activerecord,Sql,Ruby On Rails,Activerecord,我进入应用程序的rails控制台并执行以下语句: order = Order.find(2) order.update_attribute(:start_at, Time.new) ActiveRecord由以下SQL语句组成: UPDATE orders SET start_at = '2000-01-01 14:23:00', updated_at = '2014-07-16 10:30:59' WHERE orders.id = 2 现在我用相同的参数一次又一次
order = Order.find(2)
order.update_attribute(:start_at, Time.new)
ActiveRecord由以下SQL语句组成:
UPDATE orders
SET
start_at = '2000-01-01 14:23:00',
updated_at = '2014-07-16 10:30:59'
WHERE
orders.id = 2
现在我用相同的参数一次又一次地执行相同的update_attribute方法,并得到
UPDATE orders SET updated_at = '2014-07-16 10:33:52' WHERE orders.id = 2
UPDATE orders SET updated_at = '2014-07-16 10:34:11' WHERE orders.id = 2
UPDATE orders SET updated_at = '2014-07-16 10:37:19' WHERE orders.id = 2
除现场更新外,未更新任何内容 一些方法解释您在文档中使用的所有方法:
update_attribute(name, value) <= v2.3.8
更新单个属性并保存记录。这对于现有记录上的布尔标志尤其有用。还要注意
跳过验证
调用回调
如果该列可用,则更新列上的updated_at/updated_on
order.update_attribute(:start_at, Time.new)
更新此对象中的所有脏属性
您尝试的是:
仅更新更新更新的位置,因为列可用
order.update_attribute(:start_at, Time.new)
脏属性:
order.start_at = Time.new
再次:
order.update_attribute(:start_at, Time.new)
现在,列开始更新。您的订单型号有任何回调吗?在我的控制台中没有发生。。。虽然我使用的是Rails 4,但可能是一个bug。你没有提出问题吗?仅供参考:对于此类更新,您可能希望使用touch代替:order.touch:start\u at。