我正在运行rails 3.0。我有一个对象,我想更改布尔字段但不想更改updated_at时间戳。我们不会很快升级rails,所以update_column是不可能的。我宁愿不进行模型级别的更改来支持此操作(如在此帖子中:http://blog.bigbinary.com/2009/01/21/override-automatic-timestamp-in-activerecord-rails.html),因为此类型的许多对象可能同时具有对它们调用的方法。更新属性而不更改updated_at字段
3
A
回答
7
你可以使用.update_all:
User.where(:id => @user.id).update_all(:your_bool_field => true)
+0
这工作,谢谢! – 2012-08-01 19:50:18
+4
请注意,这不会触发回调 – mahemoff 2013-01-21 04:33:55
6
更新前可以将record_timestamps属性设置为false。
User.record_timestamps=false
User.first.update_attributes(:field1 => "Test")
User.record_timestamps=true
更多: http://blog.bigbinary.com/2009/01/21/override-automatic-timestamp-in-activerecord-rails.html
3
Rails的5允许更新记录而不更新时间戳。
在Rails 4.x中,当我们保存一个ActiveRecord对象,然后Rails的自动更新字段ActiveRecord::Base#save
updated_at
或updated_on
加触摸选项。
在Rails 5中,通过传递touch: false
作为保存选项,我们可以在不更新时间戳的情况下更新对象。 touch
的默认选项是true
。
>> user = User.new(name: 'David', email: '[email protected]')
>> user.save
INSERT INTO "users" ("name", "created_at", "updated_at", "email") VALUES (?, ?, ?, ?)
[["name", "John"], ["created_at", 2016-05-12 05:10:22 UTC], ["updated_at", 2016-05-12 05:10:22 UTC], ["email", "[email protected]"]]
=> true
>> user.updated_at
=> Thu, 12 May 2016 05:10:22 UTC +00:00
>> user.name = "John"
>> user.save(touch: false)
UPDATE "users" SET "name" = ? WHERE "users"."id" = ? [["name", "John"], ["id", 12]]
=> true
>> user.updated_at
=> Thu, 12 May 2016 05:10:22 UTC +00:00
相关问题
- 1. 如果正在更改某个属性,请不要更改updated_at属性
- 2. 属性不会更新输入更改
- 3. 更改字段标识符而不更改字段名称
- 4. 更新物品实体而不更改索引属性
- 5. 如何在不触摸updated_at属性的情况下更新单个属性?
- 6. GAE更改字段名称/属性
- 7. 动态更改字段的属性
- 8. joomla表单 - 更改属性和字段
- 9. 属性更改时更新标志
- 10. 更改或更新的属性值
- 11. 如何在属性值更改时更新从属属性?
- 12. 更新计算字段而不验证
- 13. 更改UINavigationBar字体属性?
- 14. Laravel 5.2 - 如何使用UTC时间戳更新“updated_at”字段?
- 15. 如何更新Sequel数据集的updated_at字段?
- 16. 有选择地更新(而不是更新)字段
- 17. 更改属性
- 18. 更改属性
- 19. 更改属性
- 20. 更改属性
- 21. 更改属性
- 22. 保存并不更新“修改”字段
- 23. 当属性已更新时,调用属性更改回调
- 24. 只更改字段的更新表
- 25. 仅更新编辑/更改的字段
- 26. 如何更新模型而不触摸ecto中的updated_at?
- 27. 不通过控制数组更改字段的属性
- 28. 更新属性
- 29. 更改易失性字段是否更新对象?
- 30. 更新日期字段不更新
你总是可以运行一些原始的SQL,不是吗? – 2012-08-01 19:20:41
[有没有办法避免自动更新Rails时间戳字段?](http://stackoverflow.com/questions/861448/is-there-a-way-to-avoid-automatically-updating-rails-timestamp -fields) – 2016-05-12 18:45:34