gpt4 book ai didi

ruby - 通过 factory_girl 协会查找或创建记录

转载 作者:数据小太阳 更新时间:2023-10-29 06:20:13 26 4
gpt4 key购买 nike

我有一个属于某个组的用户模型。组必须具有唯一的名称属性。用户工厂和组工厂定义为:

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 |

这只有在工厂定义中使用关联时才有效。

最佳答案

您可以使用 initialize_withfind_or_create 方法

FactoryGirl.define do
factory :group do
name "name"
initialize_with { Group.find_or_create_by_name(name)}
end

factory :user do
association :group
end
end

也可以和id一起使用

FactoryGirl.define do
factory :group do
id 1
attr_1 "default"
attr_2 "default"
...
attr_n "default"
initialize_with { Group.find_or_create_by_id(id)}
end

factory :user do
association :group
end
end

对于 Rails 4

在 Rails 4 中正确的方法是 Group.find_or_create_by(name: name),所以你会使用

initialize_with { Group.find_or_create_by(name: name) } 

相反。

关于ruby - 通过 factory_girl 协会查找或创建记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7145256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com