attr_accessible
將所有非指定屬性標記爲受保護的,但我仍需要在create上寫入一些關鍵屬性,如attr_readonly
所支持。使用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
我怎樣才能實現與訪問屬性的對象的創建和1個寫入只讀屬性,而不會觸發Can't mass-assign protected attributes
錯誤,同時,還能享受創建後只讀保護帶來的好處?
可能這是你想要的http://stackoverflow.com/questions/5937702/how-can-i-overwrite-attr-readonly –
沒有,attr_protected是不是我想要的,因爲我_DO_要質量 - 在創建時分配只讀變量。 – coneybeare
「寫入#1」,「不寫入」,「寫入1」。我不明白這些評論意味着什麼。 – Nowaker