ruby-on-rails - FactoryGirl 与多个模型的复杂关联

标签 ruby-on-rails factory-bot factory

我试图弄清楚如何编写属于 2 个不同模型的工厂,每个模型都应该具有相同的父模型。这是人为的示例代码:

class User < ActiveRecord::Base
  has_many :widgets
  has_many :suppliers

  attr_accessible :username
end

class Widget < ActiveRecord::Base
  belongs_to :user
  has_many :parts

  attr_accessible :name
end

class Supplier < ActiveRecord::Base
  belongs_to :user
  has_many :parts

  attr_accessible :name
end

class Part < ActiveRecord::Base
  belongs_to :supplier
  belongs_to :widget

  attr_accessible :name
end

这是我到目前为止所拥有的:
factory :user do
  name 'foo'
end

factory :widget do
  association :user
  name 'widget'
end

factory :supplier do
  association :user
  name 'supplier'
end

factory :part do
  association :widget
  association :supplier
  name 'part'
end

问题在于 part.widget.user != part.supplier.user它们必须相同。

我尝试了以下方法但没有成功:
factory :part do
  association :widget
  association :supplier, user: widget.user
  name 'part'
end

有什么建议?还是必须在创建零件后对其进行修改?

谢谢

最佳答案

我相信你可以用 callback 做到这一点:

factory :part do
  association :widget
  association :supplier
  name 'part'
  after(:create) do |part|
    user = FactoryGirl.create(:user)
    part.widget.user = part.supplier.user = user
  end
end

另见:Get two associations within a Factory to share another association

关于ruby-on-rails - FactoryGirl 与多个模型的复杂关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13041924/

相关文章:

ruby-on-rails - Rails has_one 关系,其中外键位于拥有模型上?

mysql 不尊重 my.cnf 中的 wait_timeout 设置

ruby-on-rails - 运行 rspec 测试时关系不存在

ruby-on-rails - 在 >= Rails 3.2.0 中创建 "test"数据库内容的最佳方法是什么?

ruby-on-rails - 使用 Test::Unit 和 Shoulda 设置 Factory Girl

ruby-on-rails-3 - Rails 3 + FactoryGirl : NameError: uninitialized constant Factory

c++ - 使用 std::bind 和 std::placeholders 的可变模板工厂

scala - 在工厂中使用特征

c++ - 在子类中重用工厂类型构造函数

ruby-on-rails - 在 RSpec 中,消息期望 (receive) 和测试 spy (have_received) 之间有什么区别?