update_attribute仅更新一次

时间:2014-07-16 10:50:27

标签: sql ruby-on-rails activerecord

我输入了我的申请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字段外,没有更新任何内容!

1 个答案:

答案 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已更新。