Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails属性只读不';行不通_Ruby On Rails_Activerecord - Fatal编程技术网

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。但是如果我只想在创建时批量分配它一次?