文档,以下应该是可能的:
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
。我错过了什么?
您可以将属性 , 假设 ,key 设置为:-
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_accessible
防止更改保留在数据库上,但它允许进行更改并保存在内存中:
class Dashboard < ApplicationRecord
attr_readonly :name
end
d = Dashboard.create(name: "INITIAL NAME")
d.update(name: "ANOTHER NAME")
d.name #=> "ANOTHER NAME"
d.reload && d.name #=> "INITIAL NAME"