Доступ к дочерним атрибутам с родительских фабрик Factory Girl - PullRequest
5 голосов
/ 05 сентября 2010

Я использую Factory Girl в качестве замены для приборов в моем приложении Rails. У меня есть несколько таблиц, которые я пытаюсь представить, используя ассоциации. Однако, чтобы бросить излом в цикл, помимо определения ассоциаций, мне также необходимо получить доступ к атрибутам дочерних фабрик из родительского.

Ниже приведен пример того, что я пытаюсь сделать:

  • Фабрика: foo_bar связана с Фабрикой: foo, которая связана с Фабрикой: bar
  • From: 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

Я прошел ряд уроков и других вопросов и не видел примеров того, как это сделать. Любые идеи или другие способы получить тот же результат?

Спасибо!


EDIT

Основываясь на паре вопросов, вот некоторые пояснения, которые я должен был включить изначально ...

: foo_bar - это не таблица объединения, а модель с другими собственными атрибутами.

Вот что я на самом деле пытаюсь сделать:

  • have: foo_bar создать связанную фабрику
  • затем пусть связанная фабрика создаст свою связанную фабрику
  • (это элемент, с которым я борюсь) имеют: foo_bar доступ к атрибуту с нижнего уровня Factory

Итак, если: foo_bar>: foo>: bar, то from: foo_bar, я пытаюсь получить: ID бара.

Ответы [ 2 ]

4 голосов
/ 05 ноября 2010

Я использую ловушку 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
0 голосов
/ 05 сентября 2010

Сложно сказать, как это должно выглядеть без кода модели?

а может быть что-то подобное?

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
...