如何防止ActiveRecord对象的字段被更改?

时间:2013-04-17 21:10:03

标签: ruby-on-rails ruby ruby-on-rails-3

在我的Rails 3项目中,我有一个表,我只想参考应用程序:我从不希望任何人都能够在应用程序中更改此数据。这是我到目前为止所做的:

class Foo < ActiveRecord::Base
  attr_readonly :name, :description

  has_many :bars

  def readonly?
    return true
  end
  ...
end

虽然这可以防止保存记录或使用update_attributes,但我还想将其锁定更多:有没有办法阻止分配已加载的记录,la:

f = Foo.find(1)
f.name = 'New Name'
SomeError: You cannot change properties of this object

1 个答案:

答案 0 :(得分:0)

您可以为该属性制作自定义设置器:

def name=(val)
  raise RuntimeError, 'You cannot change properties of this object'
end

这可以防止任何人修改该值。