gpt4 book ai didi

ruby-on-rails - 如何使用 Factory Girl 定义多个关联对象?

转载 作者:行者123 更新时间:2023-11-28 19:44:46 28 4
gpt4 key购买 nike

Factory Girl 文档提供了这种用于创建(我猜)父子关联的语法...

  Factory.define :post do |p|
p.author {|a| a.association(:user) }
end

帖子属于用户(其“作者”)。

如果你想定义一个工厂来创建 User,它有一堆 Post 怎么办?

或者如果是多对多情况怎么办(例如,请参阅下面的更新)?


更新

我以为我已经弄明白了。我试过这个...

Factory.define(:user) do |f|
f.username { Factory.next(:username) }

# ...

f.roles { |user|
[
Factory(:role),
Factory(:role, {:name => 'EDIT_STAFF_DATA'})
]
}
end

一开始它似乎有效,但后来我收到验证错误,因为 F.G.试图用相同的用户名和电子邮件保存用户两次。

所以我回到我原来的问题。如果你有一个多对多的关系,比如 UsersRoles,你如何定义一个工厂来返回 Users 和一些关联的角色?请注意 Roles 必须是唯一的,所以我不能有 F.G.每次创建 User 时都会在数据库中创建一个新的“ADMIN”Role

最佳答案

我不确定这是否是最正确的做法,但它确实有效。

Factory.define(:user) do |u|
u.login 'my_login'
u.password 'test'
u.password_confirmation 'test'
u.roles {|user| [user.association(:admin_role),
user.association(:owner_role, :authorizable_type => 'User', :authorizable_id => u.id) ]}
end

关于ruby-on-rails - 如何使用 Factory Girl 定义多个关联对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1047667/

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