0

假設我有兩個類,如下列:Rails 4:是否可以刪除對嵌套模型的調用?

# has attribute name 
class Foo 
    accepts_nested_attributes_for :bar 
end 

# has attribute bing 
class Bar 

end 

是否有可能在Rails中以某種方式輕鬆取出需要調用屬於嵌套類(在這種情況下Bar)屬性。也就是說,是否有可能做到以下幾點?

my_foo.name 
my_foo.bing 

我將需要創建在Foo每個Bar屬性實例的方法呢?

此外,是否有可能創建一個新的關係,以這種方式設置而不必傳入顯式參數散列​​?

my_foo = Foo.new(name: "my_foo_name", bing: "my_foo.bar.bing") 

預先感謝任何幫助,這

回答

1

你應該能夠delegate的方法來做到這一點。

對於一個定義的關聯bar,委託吸氣name屬性bar

class Foo < ActiveRecord::Base 
    has_one :bar 
    delegate :name, to: :bar 
end 

關於你的第二個問題,是的,你可以如上圖所示委託制定者name=bing=bar。您必須確保在分配完成之前創建關聯的對象,否則會得到「Undefined method ... for NilClass」錯誤。

有關詳細信息,請參閱參考delegate documentation

+0

謝謝,這正是我一直在尋找的,我無法向你投票足夠!我想補充一點,我在我的模型中使用[稍微不爲人知的]'after_initialize'回調來確保我的關聯對象可用 – DazBaldwin 2014-09-06 09:26:23