Rails attr_readonly不起作用
根据这个问题和attr_readonly
的文档 ,应该可以:
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
。 我在做什么?
从文档
attr_accessible
采用可访问的属性列表。 所有其他属性都将受到保护 。
因此attr_accessible
使bar
属性不受大规模分配的影响。
您可以将该属性设为密钥: –
attr_accessible :key
然后再添加一个validation
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
通过这种方式,您可以在创建时对其进行一次分配,也可以确保不会更新。