2012-04-25 3 views
3

Я столкнулся с причудливо. У меня есть модель GuardianUpdate с полем «read», которое является логическим. Когда я перехожу к вызову update_attribute (: read, true) в записи, рельсы не могут фактически обновить запись.Rails update_attribute не сохраняет

Вот моя консоль выход:

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 Anywhere. Вот моя модель GuaridanUpdate:

class GuardianUpdate < ActiveRecord::Base 
    belongs_to :update 
    belongs_to :guardian 
end 

Любые мысли?

Следует отметить, что update_column (: read, true) работает, без проблем.

+0

Что произойдет, если вы выполните g.update_attributes! (: Read => false) '? –

+0

Ничего. Нет ошибок, нет обновлений ... ничего. –

ответ

4

belongs_to :update создает аксессуар update, который переписывает метод внутренних рельсов с тем же именем. Этот метод отвечает за фактическое сохранение изменений существующего объекта.

Переименуйте ассоциацию, и все должно быть в порядке. Rails должен поднять исключение DangerousAttributeName, чтобы предупредить вас об этом - не знаю, почему этого не происходит

+0

Это действительно решило проблему! –

2

Поскольку у вас есть «принадлежность к: обновление», у вас, вероятно, есть модель под названием «Обновление». Некоторые люди сообщали о проблемах с использованием модели под названием Update, смотрите здесь:

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

Может быть, попробуйте переименовать его в ContentUpdate или что-то другое.

Смежные вопросы