我的发票模型有一个address_id属性,我不希望这个address_id更改为FOREVER。所以我不希望这种情况发生在课外:
invoice.address_id = 1
invoice.address = some_address
Rails会自动将此address_id属性从发票表添加到模型中,那么如何将此属性声明为private / protected?调用
attr_protected :address_id
很可能不是解决方案,因为基于文档它只能阻止大规模分配。
谢谢!
答案 0 :(得分:20)
你想要attr_readonly
。
答案 1 :(得分:3)
不像单行一样漂亮,但下面的代码应该可以工作(你总是可以做一些元编程来编写'不可变'方法)
def address_id=(id)
if new_record?
write_attribute(:address_id, id)
else
raise 'address is immutable!'
end
end