Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 更新\u属性只更新一次_Sql_Ruby On Rails_Activerecord - Fatal编程技术网

Sql 更新\u属性只更新一次

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 现在我用相同的参数一次又一次

我进入应用程序的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
现在我用相同的参数一次又一次地执行相同的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。