0

我有以下工厂:

factory :user do
    first_name 'Mister'
    player
end

factory :player do
  rating 20
end

当我这样创建用户时:

@user = FactoryGirl.create(:user)

我这样做:

puts @user.player.inspect

我得到:

#<Player id: nil, rating:nil, user_id: 44>

在用户模型中,我有以下内容:

after_create build_player

我认为这是覆盖由工厂创建的播放器。如果是这样,我该如何解决?

请注意,关系是:

User has_one Player
Player belongs_to User (foreign key user_id in Player table)
4

3 回答 3

1

你总能做到

factory :user do
    first_name 'Mister'

    after_create do |user, evaluator|
        user.player = player
    end
end

看看这是否适合你。

于 2012-07-05T09:19:15.890 回答
0

试试这个:

FactoryGirl.define do
    factory :user do |u|
        u.first_name 'Mister'
        u.player { |p| p.association(:player) }
    end
end
于 2012-07-03T19:10:18.777 回答
0

由于用户不需要(成为?)播放器,因此您应该使用以下工厂定义:

factory :user do
    first_name 'Mister'
end

factory :player do
  rating 20
  user
end

当您创建一个播放器时,它将创建一个使用对象并将新的播放器对象与此用户对象相关联。

于 2012-07-05T09:09:57.077 回答