gpt4 book ai didi

ruby-on-rails - factory_girl_rails has_many 关联仅包含许多集合中的一个

转载 作者:行者123 更新时间:2023-12-04 06:21:47 24 4
gpt4 key购买 nike

我正在使用 factory_girl_rails而不是固定装置。这是我的模型:

class User < ActiveRecord::Base
has_many :tasks
end

class Task < ActiveRecord::Base
belongs_to :user
end

这是我的工厂:
Factory.define :user do |u|
end

Factory.define :task do |t|
t.association :user, :factory => :user
end

在测试中,我这样做:
user = Factory.create :user
(1..5).each { Factory.create(:task, :user => user)}

我遇到的问题是之后 user.tasks只包含一项任务。

我试过定义 user工厂是这样的:
Factory.define :user do |u|
u.tasks {|tasks| [tasks.association(:user)] }
end

像这样:
Factory.define :user do |u|
u.tasks {|tasks| [tasks.association(:user), tasks.association(:user)] }
end

在这两种情况下 Factory.create(:user)导致无限循环。

最佳答案

我认为你在做的是倒退——你可以从用户创建任务,但不能像你试图做的那样反之亦然。从概念上讲,关联从用户到任务。

我所做的是为这种类型的用户创建一个特殊的工厂。

Factory.define :user_with_tasks, :parent => :user do |user|
user.after_create {|u| 5.times { Factory.create(:task, :user => user) } }
end

另外,如果您只想使用默认工厂,则只需执行此操作
Factory.define :task do |f|
f.user :user
end

无需指定工厂

更新:看起来其他人过去也做过类似的事情:
Populating an association with children in factory_girl

关于ruby-on-rails - factory_girl_rails has_many 关联仅包含许多集合中的一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6460622/

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