我遇到了一个奇怪的事情。我有一个模型GuardianUpdate,字段“read”是一个布尔值。当我在记录上调用update_attribute(:read,true)时,rails无法实际更新记录。
这是我的控制台输出:
1.9.3p0 :026 > g = GuardianUpdate.find(1)
GuardianUpdate Load (0.7ms) SELECT `guardian_updates`.* FROM `guardian_updates` WHERE `guardian_updates`.`id` = 1 LIMIT 1
=> #<GuardianUpdate id: 1, update_id: 2, guardian_id: 11, read: true, created_at: "2012-04-21 04:06:45", updated_at: "2012-04-21 04:06:45">
1.9.3p0 :027 > g.update_attribute(:read, false)
(0.3ms) BEGIN
Update Load (0.4ms) SELECT `updates`.* FROM `updates` WHERE `updates`.`id` = 2 LIMIT 1
(0.1ms) COMMIT
=> true
1.9.3p0 :028 > g.reload
GuardianUpdate Load (0.5ms) SELECT `guardian_updates`.* FROM `guardian_updates` WHERE `guardian_updates`.`id` = 1 LIMIT 1
=> #<GuardianUpdate id: 1, update_id: 2, guardian_id: 11, read: true, created_at: "2012-04-21 04:06:45", updated_at: "2012-04-21 04:06:45">
1.9.3p0 :029 >
正如您所知,任何地方都没有UPDATE sql语句。这是我的GuaridanUpdate模型:
class GuardianUpdate < ActiveRecord::Base
belongs_to :update
belongs_to :guardian
end
有什么想法吗?
我应该提到update_column(:read,true)有效,完全没问题。
答案 0 :(得分:4)
belongs_to :update
正在创建一个覆盖同名内部rails方法的update
访问器。该方法负责实际保存对存在对象的更改。
重命名关联,你应该没问题。 Rails假设提出一个DangerousAttributeName
例外来警告你 - 不知道为什么不发生这种情况
答案 1 :(得分:2)
由于您拥有“belongs_to:update”,因此您可能拥有一个名为Update的模型。有些人使用名为Update的模型报告了问题,请参见此处:
也许尝试将其重命名为ContentUpdate或其他内容。