12

我的 Invoice 模型有一个 address_id 属性,我不希望这个 address_id 永远改变。所以我不希望这发生在课外:

invoice.address_id = 1
invoice.address = some_address

Rails 会自动将此 address_id 属性从发票表添加到模型中,那么我如何声明此属性为私有/受保护的呢?打电话

attr_protected :address_id

很可能不是解决方案,因为根据文档它只能防止批量分配。

谢谢!

4

2 回答 2

21

你想要attr_readonly

于 2008-09-26T03:11:43.680 回答
4

不像一个衬里那么漂亮,但下面的代码应该可以工作(你总是可以做一些元编程来编写一个“不可变”的方法)

def address_id=(id)
  if new_record?
    write_attribute(:address_id, id)
  else
    raise 'address is immutable!'
  end
end 
于 2008-09-26T03:08:11.677 回答