3

我遇到了一个奇怪的问题。我有一个模型 GuardianUpdate ,其字段“读取”是一个布尔值。当我在记录上调用 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) 有效,完全没有问题。

4

2 回答 2

4

belongs_to :update正在创建一个update覆盖同名内部 rails 方法的访问器。该方法负责实际保存对现有对象的更改。

重命名关联,你应该没问题。Rails 应该引发一个DangerousAttributeName异常来警告你 - 不知道为什么这没有发生

于 2012-04-25T03:01:36.983 回答
2

由于您有一个“belongs_to :update”,您可能有一个名为 Update 的模型。有些人使用名为 Update 的模型报告了问题,请参见此处:

https://rails.lighthouseapp.com/projects/8994/tickets/5772-calling-a-model-update-leads-to-unexpected-behavior

也许尝试将其重命名为 ContentUpdate 或其他名称。

于 2012-04-25T02:13:32.943 回答