0
假設我們以下類正確屬性初始化時的屬性由另一類包裹
class Foo < ActiveRecord::Base
attr_accessible :name, :bars, :bazs
def bars=(bars)
baz = []
bars.each { |b| barz << Baz.new(bar:b, magic_number: 123) }
end
def bars
bazs.map(&:bar)
end
end
class Bar < ActiveRecord::Base
attr_accesible :name
end
class Baz < ActiveRecord::Base
attr_accesible :magic_number, :bar
has_one :bar
end
這是「軌道」的方式來聲明一個初始化方法,以便當從散列創建一個Foo已bazs被初始化。例如
Foo.new(name:"foo", bars:[Bar.new(name:"b1"), Bar.new(name:"b2")])
不能使用after_initialize
因爲self[:bars]
收益爲零。另一個選項是覆蓋initialize
方法,但它不是由Rails文檔推薦的,我不能使用barz=
,因爲初始化後barz
返回nil
,我不得不使用self[:barz]=
。另一種選擇是聲明一個類構造方法,通過調用setter來進行正確的初始化,但它似乎不是Ruby方式(Foo.from(name:"foo", bars:[Bar.new(name:"b1"), Bar.new(name:"b2")])
)。
感謝
它是'attr_accessible:name,:bars,:barz','barz = []'和'bars.each {| b | barz << Baz.new(bar:b,magic_number:123)}'? –