【发布时间】:2010-09-16 09:39:27
【问题描述】:
我正在尝试了解 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”,代码可以工作......但属性没有保存(显然)。真的很奇怪
EDIT 2奇怪...开发日志显示了这一点
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 {}>
【问题讨论】:
-
你的意思是为什么这不起作用,有什么错误?您可以在 yourobject.save 之后调用 yourobject.errors 来检查
-
哦,好的,我得到了这个 myobject.errors #
-
myobject.errors.inspect怎么样?? -
这也返回 => #
标签: ruby-on-rails activerecord