Я пытаюсь понять обратные вызовы Active Record, но они не работают, как я хочу.
например,
Модель
Checklist<ActiveRecord...
attr_accessible :item1, :item2, :done # they are all boolean
before_save :check_done
private
def check_done
if item1 && item2
write_attribute :done, true
else
write_attribute :done, false
end
end
, это не сработает, если я создаю экземпляр объекта в консоли и пытаюсь сохранить его, операция сохранения возвращает "false":(
Что не так с этим кодом? Заранее спасибо:)
РЕДАКТИРОВАТЬ: Похоже, что-то не так с вызовом before_save, если я использую "after_save ", код работает ... но атрибут не сохраняется (очевидно).Это действительно странно
РЕДАКТИРОВАТЬ 2 Wierd ... Журналы разработки показывают это
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
[0m
[1m[35mChecklist Load (0.2ms)[0m SELECT "checklists".* FROM "checklists" ORDER BY checklists.id DESC LIMIT 1
WARNING: Can't mass-assign protected attributes: id
, но это действительно странно, потому что если я удаляю строку attr_accessible, явсе равно получаю эту ошибку ...
РЕДАКТИРОВАТЬ 3 Если кто-нибудь спросит, да, я пытаюсь обновить существующую запись.
РЕДАКТИРОВАТЬ 4 Да, мне нравится редактировать Если я наберу в консоли
c.save => # false
c.errors => #<OrderedHash {}>