Rails attr_readonly不起作用

时间:2012-07-08 12:13:00

标签: ruby-on-rails activerecord

根据this questionattr_readonly的{​​{3}},以下内容应该是可能的:

class MyModel < ActiveRecord::Base
  attr_accessible :foo
  attr_readonly :bar
end

m = MyModel.create(foo: '123', bar: 'bar') # Should work
m.update_attributes(bar: 'baz')            # Should not work

然而第一个失败了,说我无法大量分配bar。我在做什么?

2 个答案:

答案 0 :(得分:4)

来自documentation

  

attr_accessible获取可访问的属性列表。   所有其他属性都将受到保护

因此,attr_accessible使bar属性受到质量分配的保护。

答案 1 :(得分:2)

您可以将该属性设为: -

attr_accessible :key

然后再添加一个验证

validate :check_if_key_changed, :on=> :update

private
def check_if_key_changed
  if self.key_changed?
    errors.add(:key,"cant change key")
  end
end

通过这种方式,您可以在创建时批量分配一次,也可以确保它不会更新。