Итак, после нескольких часов избиений головой об этой проблеме, я думаю, что наконец-то нашел решение. Хотя это довольно безумно, так что, надеюсь, кто-то еще сможет показать мне, где я глупый.
Factory.define :foo do |foo|
end
Factory.define :bar do |bar|
end
Factory.define :baz do |baz|
end
Factory.define :foo_with_baz do |foo|
foo.after_create { |foo| Factory(:baz, :foo => foo) }
end
Factory.define :bar_baz do |bar_baz|
bar_baz.bar {|bar| bar.association(:bar, :foo => Factory(:foo_with_baz))
bar_baz.after_build {| bar_baz| bar_baz.baz_id = bar_baz.foo.bars.first.id }
end
Ключевой вопрос заключается в том, что в базе данных должен быть foo, который вы можете получить только через фабрики, так как вы можете использовать локальные переменные или произвольный код ruby в factories.rb (насколько я могу судить).