我想了解活动记录回调,但他们不工作,就像我想。如何在保存之前在ActiveRecord对象中设置属性?
例如
型号
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 如果有人问,是的,我正在尝试更新现有的记录。
EDIT 4 是的,我喜欢编辑 如果我在控制台输入
c.save => # false
c.errors => #<OrderedHash {}>
为什么你的意思是,这并不工作做,有什么错误?你可以通过调用yourobject.errors来检查你的whorobject.save – Mike 2010-09-16 13:57:01
哦,好吧 我得到这个myobject.errors# –
tabaluga
2010-09-16 16:04:57
'myobject.errors.inspect'怎么样? – PeterWong 2010-09-16 16:15:44