Ruby on rails Rails属性只读不';行不通
根据Ruby on rails Rails属性只读不';行不通,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,根据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 classmymodel
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
classmymodel
但是第一个失败了,说我不能批量分配bar
。我错了什么?来自
attr\u accessible
获取可访问的属性列表。
所有其他属性都将受到保护
因此
attr\u accessible
将bar
属性设置为不受批量分配的保护。假设您可以将属性设置为键:-
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
通过这种方式,您可以在创建时对其进行一次批量分配,还可以确保它不会被更新。我明白了,所以我必须将其添加到两个文件中,
attr\u accessible
和attr\u readlony
?有点违反直觉…不,如果你想大量使用它,它不会是只读的。你必须只做attr_accessible。但是如果我只想在创建时批量分配它一次?