如何保护Rails模型属性?
时间:2020-03-06 14:45:47 来源:igfitidea点击:
我的帐单模型具有address_id属性,但我不希望此address_id永远更改。所以我不希望这种情况在课外发生:
invoice.address_id = 1 invoice.address = some_address
Rails会自动从发票表中将此address_id属性添加到模型中,那么如何将该属性声明为私有/受保护?呼唤
attr_protected :address_id
最有可能不是解决方案,因为根据文档,它只能阻止批量分配。
谢谢!
解决方案
不像一个衬里那么漂亮,但是下面的代码应该可以工作(而且我们总是可以做一些元编程来编写"不变"方法)
def address_id=(id) if new_record? write_attribute(:address_id, id) else raise 'address is immutable!' end end
我们需要attr_readonly
。