根据this question和attr_readonly
的documentation,以下应该是可能的:
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
。我错过了什么?
3条答案
按热度按时间58wvjzkj1#
来自文件
attr_accessible
接受一个可访问的属性列表。所有其他属性都将受到保护。所以
attr_accessible
将bar
属性设置为不受mass赋值的保护。vktxenjb2#
你可以把属性,假设,键设置为:
然后再添加一个验证
通过这种方式,您将能够在创建时批量分配它,并且还可以确保它不会更新。
uinbv5nw3#
在Rails 7.1
attr_accessible
之前,它阻止更改在数据库上持久化,但它允许更改并保存在内存中:从Rails 7.1开始,如果我们试图更新一个持久化的只读属性,就会引发一个错误。(请检查您的应用程序配置
active_record.raise_on_assign_to_attr_readonly
)