FactoryGirl - 从多态关联中的另一个工厂检索属性

时间:2016-01-02 17:07:16

标签: ruby-on-rails polymorphism associations factory-bot belongs-to

我有Board属于Artist。到目前为止,我能够在我的电路板工厂中设置这个多态关联:

FactoryGirl.define do
  factory :board do
    association :boardable, factory: :artist
    boardable_type "Artist"
  end
end

我在实际应用中设置的模式要求我的主板name为其所属艺术家的名称。我尝试过这样的事情:

name boardable.name

但最终得到了这个错误:

ArgumentError: Trait not registered: boardable

belongs_to/polymorphic关联中检索属性的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

多态关联不需要在FactoryGirl中声明显式association。以下内容已经过验证,可以使用:

FactoryGirl.define do
  factory :board do
    boardable factory: :artist
    name { boardable.name }
  end
end

Board的名称而言,请确保将属性值包装在括号中,或者FactoryGirl可能将其视为特征:) {{1} boardable_type属性将自动设置为Board的类,因此它甚至不需要声明。

答案 1 :(得分:0)

您可以使用之前:创建。像这样的东西

FactoryGirl.define do
  factory :board do
    ...
    before(:create) do |board, evaluator|
      # create artist factory here to associate board to
      # example below that isn't polymorphic but you get the idea
      FactoryGirl.create(:artist, name: "foo").boards << board
    end
  end
end