在factory_girl中,如何指定与另一个工厂同名的属性?

时间:2016-03-16 18:42:01

标签: ruby-on-rails ruby factory-bot

我有两张表如下:

POSITION TABLE:
POSITION_ID |SPORT_ID |PARENT_POSITION |SOURCE_ID |SOURCE_POSITION_NAME |
------------|---------|----------------|----------|---------------------|
1           |1        |1               |1         |Goalkeeper           |

LOCALIZED_POSITION TABLE:
LOCALIZED_POSITION_ID |POSITION_ID |LOCALE_ID |POSITION         |
----------------------|------------|----------|-----------------|
1                     |1           |1         |Goalkeeper       |

当我定义这个工厂时

FactoryGirl.define do
  factory :localized_position do
    position_id { Faker::Number.number(2) }
    locale_id { Faker::Number.number(2) }
    position 'Goalkeeper'
  end
end

并致电FactoryGirl.create(:localized_position)我收到此错误:

Position(#70280313353320) expected, got String(#70280311914580)

由于工厂名称相同,似乎期待对象位置

我已经尝试了一些没有成功的改变,例如:

self.position 'Goalkeeper'

FactoryGirl.define do
  factory :localized_position do |f|
    f.position_id { Faker::Number.number(2) }
    f.locale_id { Faker::Number.number(2) }
    f.position { 'Goalkeeper' + Random.rand(1..100).to_s }
  end
end

但没有任何作用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你做了一个关联,而不是你在FactoryGirl做关联的方式。该错误告诉您它正在期待一个位置模型,并且您已经为它分配了一个字符串。

FactoryGirl.define do
  factory :localized_position do
    position { create(:position) }
  end
end

或者可能反过来,因为我不确定你在那里做STI或多态关联。您在两个表中都有position_id,这似乎是可疑的。

FactoryGirl.define do
  factory :position do
    localized_position { create(:localized_position) }
  end
end