我的 Invoice 模型有一个 address_id 属性,我不希望这个 address_id 永远改变。所以我不希望这发生在课外:
invoice.address_id = 1
invoice.address = some_address
Rails 会自动将此 address_id 属性从发票表添加到模型中,那么我如何声明此属性为私有/受保护的呢?打电话
attr_protected :address_id
很可能不是解决方案,因为根据文档它只能防止批量分配。
谢谢!
我的 Invoice 模型有一个 address_id 属性,我不希望这个 address_id 永远改变。所以我不希望这发生在课外:
invoice.address_id = 1
invoice.address = some_address
Rails 会自动将此 address_id 属性从发票表添加到模型中,那么我如何声明此属性为私有/受保护的呢?打电话
attr_protected :address_id
很可能不是解决方案,因为根据文档它只能防止批量分配。
谢谢!
你想要attr_readonly。
不像一个衬里那么漂亮,但下面的代码应该可以工作(你总是可以做一些元编程来编写一个“不可变”的方法)
def address_id=(id)
if new_record?
write_attribute(:address_id, id)
else
raise 'address is immutable!'
end
end