查询使用FactoryBot创建has_many&belongs_to记录

wei*_*ney 0 ruby-on-rails has-many belongs-to factory-bot

我正在编写Rspec requests spec,在此之前我想使用构建一些测试数据FactoryBot.

现在我有一个模型Game:

class Game < ApplicationRecord
  has_many :game_levels
Run Code Online (Sandbox Code Playgroud)

和模型GameLevel:

class GameLevel < ApplicationRecord
  belongs_to :game
Run Code Online (Sandbox Code Playgroud)

在我的/spec/factories/game.rb:

FactoryBot.define do
  factory :game do
    name { :Mario }
  end
end
Run Code Online (Sandbox Code Playgroud)

在我的spec/factories/game_level.rb:

FactoryBot.define do
  factory :game_level do
    name { :default }
    min_level { 0 }
    max_level { 100 }

    game
  end
end
Run Code Online (Sandbox Code Playgroud)

在我spec/requests/user_plays_game_spec.rb,我只是编写代码来创建游戏和game_level,并打印game.id,game_level.game_id.我发现它们不一样.此外,game.game_levels回报nil.

before(:all) do
  @game = create(:game)
  @game_level = create(:game_level)
end

describe do
  it do
    puts @game,id, @game_level.game_id
    puts @game.game_levels

    expect(@game.id).to eql(@game_level.game_id)
  end
end
Run Code Online (Sandbox Code Playgroud)

那么如何使用belongs_to记录与has_many记录关联FactoryBot呢?

Ste*_*zyn 5

您可以在创建期间将其关联

@game = create(:game)
@game_level = create(:game_level, game: @game)
Run Code Online (Sandbox Code Playgroud)