我输入了我的申请rails console
并执行了以下声明:
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
除updated_at
字段外,没有更新任何内容!
答案 0 :(得分:0)
一些解释您使用的方法(全部来自doc):
update_attribute(name, value) <= v2.3.8
更新单个属性并保存记录,而无需通过正常的验证程序。
update_attribute(name, value) >= 4.0.0
更新单个属性并保存记录。这对现有记录上的布尔标志特别有用。另请注意
跳过验证。
调用回调。
updated_at / updated_on列会更新。
更新此对象中所有脏的属性。
你尝试了什么:
仅更新updated_at
已更新,因为列可用。
order.update_attribute(:start_at, Time.new)
脏属性:
order.start_at = Time.new
再次:
order.update_attribute(:start_at, Time.new)
现在列start_at已更新。