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