attr_accessible
は、指定されていないすべての属性を保護されているものとしてマークしますが、attr_readonly
.
私は次のようにモデルを設定しています:
class Foo < ActiveRecord::Base
attr_accessible :bar, :baz
attr_readonly :shiz
end
class FooParent < ActiveRecord::Base
has_many :foos
end
@foo_parent.foos.build(:bar => 1, :baz => 2, :shiz => 3) # Can't mass-assign protected attribute: :shiz
ここでの明らかな回避策は、 を使用attr_readonly
せず、キー属性なしでオブジェクトを作成し、後でそれらを設定して保存することです。このアプローチの欠点は、少なくとも 2 回の書き込みが発生したことです。この作成メソッドは、人間が可能な限りパフォーマンスを発揮する必要があります。
@foo_parent.foos.build(:bar => 1, :baz => 2) # write #1
@foo_parent.foos.each do |f|
f.update_attribute(:baz, 3) # write #2 and more
end
Can't mass-assign protected attributes
作成後に読み取り専用保護の利点を享受しながら、エラーをトリガーすることなく、アクセス可能な属性と読み取り専用属性を持つオブジェクトを 1 回の書き込みで作成するにはどうすればよいですか?