0
0

More than 1 year has passed since last update.

RSpecで孫モデルから親モデルの属性を指定することはできない

Last updated at Posted at 2022-01-20

概要

has_one/belong_toの関係で構成された2段階のモデルがあった場合、孫モデルをcreateするときに親モデルの値を指定したかった。
Image from Gyazo

結論

できない

じゃあどうするのか

一度子モデルを作って繰り返すしかない。以下例。

■RSpec

  # 一番上の親モデルを作ります
  oya = create(:)

  # 子モデルをcreate_listで作りながら、eachで孫モデルを作ります
  create_list(:, 3, : oya).each do |child|
    create(:, : child)
  end

■子Factory

  factory :, class: 'Child' do
    # associationで自動で親モデルをcreateしてくれる。が、RSpecで指定した「oya」で上書きされる感じ
    association :

    # RSpecで上書きされた親のidをつかう
    sequence(:oya_id) { .id }
    sequence(:name) { |n| "testname#{n}" }
  end

■孫Factory

  factory :, class: 'Mago' do
    # associationで自動で子モデルをcreateしてくれる。が、RSpecで指定した「child」で上書きされる感じ
    association :, factory: :Child

    # RSpecで上書きされた子のidをつかう
    sequence(:child_id) { .id }
    sequence(:name) { "c" }
  end

Factory内で2階層上のIDを何とか指定したかったができなかった。いい方法があれば教えてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0