У меня есть модель пользователя, которая принадлежит к группе. Группа должна иметь атрибут уникального имени. Фабрика пользователей и фабрика групп определяются как:
Factory.define :user do |f|
f.association :group, :factory => :group
# ...
end
Factory.define :group do |f|
f.name "default"
end
Когда создается первый пользователь, создается также новая группа. Когда я пытаюсь создать второго пользователя, это терпит неудачу, потому что он снова хочет создать ту же группу.
Есть ли способ указать методу ассоциации factory_girl сначала искать существующую запись?
Примечание: я действительно пытался определить чтобы справиться с этим, но тогда я не могу использовать f.association. Я хотел бы иметь возможность использовать его в таких сценариях Cucumber:
Given the following user exists:
| Email | Group |
| test@email.com | Name: mygroup |
и это может работать, только если ассоциация используется в определении Factory.
Я имел подобную проблему и предложил это решение. Это ищет группу по имени и если найдено, что это связывает пользователя с той группой. Иначе это создает группу тем именем и затем связывается с ним.
factory :user do
group { Group.find_by(name: 'unique_name') || FactoryBot.create(:group, name: 'unique_name') }
end
я надеюсь, что это может полезным для кого-то:)