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