2010-09-05 77 views
5

我正在实施工厂女孩作为我的Rails应用程序中夹具的替代品。我有几张表,我试图用关联来表示。然而,为了向循环中抛出一个扭曲,除了定义关联之外,我还需要从父级访问子工厂的属性。从父母工厂女孩工厂访问子属性

下面是什么,我试图做一个例子:

  • 厂:foo_bar这样的名称关联到工厂:foo,它关联到厂:巴
  • 来源:foo_bar这样,我尝试两种访问属性:foo和:酒吧

这里是样本:

Factory.define :bar do |e| 
    e.name   "Bar" 
end 

Factory.define :foo do |e| 
    e.bar   {|b| b.association(:bar)} 
end 

Factory.define :foo_bar do |b| 
    f = b.association(:foo) 
    b.foo_id  foo.id 
    b.bar_id  foo.bar_id 
end 

我已经通过了一些教程和其他问题,并没有看到如何做到这一点的任何示例。任何想法或其他获得相同结果的方法?

谢谢!


编辑

基于一对夫妇的问题,这里有一些澄清,我应该最初包括...

:foo_bar这样的名称是不是一个连接表,而是一个模型与其自己的其他属性。

这就是我其实是想做到:

  • 有:foo_bar这样的名称创建关联的厂
  • 则有相关的厂创建它相关的工厂
  • (这是我的元素米,挣扎)有:foo_bar这样从底层厂访问属性

所以,如果:foo_bar这样的名称>:FOO>:从然后棒:foo_bar这样,我想要知道的:酒吧的ID。

+0

我不是真正明确:foo_bar这样的名称是。它只是一个连接表还是它有其他属性没有列出? – 2010-09-05 13:56:25

+0

嗨 - 感谢您的评论。是的,我可以看到它是如何从简化版本中混淆的。 :foo_bar具有其他属性,只是不显示。这不是一个连接表。 – shedd 2010-09-06 11:21:51

+0

这是我一直在寻找的线程,fyi:http://groups.google.com/group/factory_girl/browse_thread/thread/2ffdd38eb31b0727?pli=1 – shedd 2010-09-06 12:00:23

回答

0

很难说没有型号代码的样子吗?

但也许是这样的?

Factory.define :bar do |f| 
    f.name "Bar" 
    f.association :foo_bar 
end 

Factory.define :foo do |f| 
    f.name "Foo" 
    f.association :foo_bar 
end 

Factory.define :foo_bar do |f| 
    f.association :foo 
    f.association :bar  
end 
+0

感谢您的回复。我认为我的例子没有清楚地说明完整的问题。我会修改它更清楚,但我实际上试图做的是:foo_bar创建一个关联的工厂,然后让该关联的工厂创建它关联的工厂,但(这是我挣扎的元素与)也有:foo_bar访问底层Factory的一个属性。所以,:foo_bar>:foo>:bar和来自:foo_bar,我试图得到:酒吧的ID。这是否更有意义? – shedd 2010-09-06 11:26:23

4

我使用的是after_build钩来处理这样的情况:

Factory.define :foo do |f| 
    f.name "Foo" 
    f.association :foo 
    f.after_build do |obj| 
    obj.foo_bar = obj.foo.bar 
    end 
end