从父Factory Factory工厂访问子属性

时间:2010-09-05 13:30:45

标签: ruby-on-rails ruby unit-testing testing factory-bot

我正在实施Factory Girl作为我的Rails应用程序中灯具的替代品。我有几个表,我试图用关联来表示。但是,为了在循环中抛出一个问题,除了定义关联之外,我还需要从父级访问子工厂的属性。

下面是我正在尝试做的一个例子:

  • 工厂:foo_bar与Factory:foo相关联,它与Factory:bar
  • 相关联
  • 来自:foo_bar,我正在尝试访问两者的属性:foo和:bar

以下是样本:

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> :bar然后来自:foo_bar,我正试图得到:bar的ID。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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