加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:32:28 所属栏目:百科 来源:网络整理
导读:我正在试图弄清楚如何编写属于2个不同模型的工厂,每个模型应该具有相同的父模型.这是人为的示例代码: class User ActiveRecord::Base has_many :widgets has_many :suppliers attr_accessible :usernameendclass Widget ActiveRecord::Base belongs_to :use
我正在试图弄清楚如何编写属于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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读