如何保护Rails模型属性?

时间:2008-09-26 03:03:22

标签: ruby-on-rails ruby model

我的发票模型有一个address_id属性,我不希望这个address_id更改为FOREVER。所以我不希望这种情况发生在课外:

invoice.address_id = 1
invoice.address = some_address

Rails会自动将此address_id属性从发票表添加到模型中,那么如何将此属性声明为private / protected?调用

attr_protected :address_id

很可能不是解决方案,因为基于文档它只能阻止大规模分配。

谢谢!

2 个答案:

答案 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