加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在FactoryGirl中创建一个关联,并使用另一

发布时间:2020-12-16 21:00:17 所属栏目:百科 来源:网络整理
导读:是否可以使用关联作为特征中另一个关联的值? 让我描述一个(简化的)例子.我有3个型号 用户 论坛(belongs_to:论坛) 线程(belongs_to:论坛,belongs_to:用户) 请注意,Thread包含一个user_id,它不属于User通过论坛(目前,我不能改变这样的约束). 我想知道的是,
是否可以使用关联作为特征中另一个关联的值?

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

>用户
>论坛(belongs_to:论坛)
>线程(belongs_to:论坛,belongs_to:用户)

请注意,Thread包含一个user_id,它不属于User通过论坛(目前,我不能改变这样的约束).

我想知道的是,是否有办法定义像这样的特征

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

该特性应该做的是创建一个用户并将其与线程相关联.
然后它应该创建一个论坛,但用户应该是先前创建的同一个实例.

主要有两个原因:

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

任何的想法?我试图使用延迟评估,但无法将其与关联一起使用.

解决方法

做相反的事情并将线程的用户设置为与论坛相同是否有意义?论坛工厂是否创建了用户?
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

不利于用于构建线程的策略,它将始终创建一个论坛.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读