6

根据这个问题和以下文件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

但是第一个失败了,说我不能 mass-assign bar。我错过了什么?

4

2 回答 2

4

文档

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

因此attr_accessible,使bar属性免受大规模分配。

于 2012-07-08T12:25:47.113 回答
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

通过这种方式,您将能够在创建时对其进行批量分配,并且还可以确保它不会被更新。

于 2013-10-08T06:57:45.523 回答