gpt4 book ai didi

ruby-on-rails - 如何在 FactoryGirl 中使用从另一个 FactoryGirl 关联中延迟评估的值创建关联

转载 作者:数据小太阳 更新时间:2023-10-29 07:17:47 24 4
gpt4 key购买 nike

是否可以将一个关联用作特征中另一个关联的值?

让我描述一个(简化的)例子。我有 3 个模型

  • 用户
  • 论坛 (belongs_to :forum)
  • 主题 (belongs_to :forum, belongs_to :user)

请注意Thread包含一个user_id,它不属于User通过Forum(在暂时,我不能改变这样的约束)。

我想知道的是,是否有一种方法可以定义像这样的特征

FactoryGirl.define do
factory :thread do
trait :with_forum do
association :user
# Lazy-evaluate the value of user to the previously created factory
# THIS IS THE KEY POINT: I want 'user' to be the factory created at the previous line
association :forum, user: user
end
end
end

trait 应该做的是创建一个用户并将其关联到线程。然后它应该创建一个论坛,但是用户应该是之前创建的同一个实例。

主要有两个原因:

  • 与论坛关联的用户与主题相同
  • 我不想在级联上创建两个用户工厂

有什么想法吗?我尝试使用惰性求值,但无法将其与关联一起使用。

最佳答案

做相反的事情并将线程的用户设置为与论坛的用户相同是否有意义?论坛工厂是否创建用户?

FactoryGirl.define do
factory :thread do
trait :with_forum do
forum
user { forum.user }
end
end
end

如果你真的想用另一种方式来做,你绝对可以使用惰性属性:

FactoryGirl.define do
factory :thread do
trait :with_forum do
user
forum { create(:forum, user: user) }
end
end
end

缺点是无论用于构建线程的策略如何,它总是会创建一个论坛。

关于ruby-on-rails - 如何在 FactoryGirl 中使用从另一个 FactoryGirl 关联中延迟评估的值创建关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20685322/

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