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


概要

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

結論

できない

じゃあどうするのか

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

■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を何とか指定したかったができなかった。いい方法があれば教えてください。