Rails 3 - 工厂女孩和belongs_to表的序列

时间:2012-04-07 13:06:37

标签: ruby-on-rails ruby-on-rails-3 rspec factory factory-bot

我有2个模型 - 用户教师教师 belongs_to 用户用户教师

所以,我使用Factory girl gem:

Factory.define :user do |user|
  user.user_login "Another User"
  user.user_role "admin"
  user.password "foobar"
end

Factory.sequence :user_login do |n|
  "person-#{n}"
end

Factory.define :teacher do |teacher|
  ...
  teacher.user                                                                            
end

我遇到了问题,我不明白如何解决这个问题。当我通过工厂创建用户时,我可以轻松地写出:

@user = Factory( :user, :user_login => Factory.next(:user_login)  ) 

这会创建用户登录。

我怎样才能为老师做同样的事情?我试过了:

@teacher = Factory( :teacher, :user_login => Factory.next(:user_login)  ) 

它不起作用。

2 个答案:

答案 0 :(得分:2)

您不必单独指定序列,然后将它们传递给另一个工厂 - 您可以在工厂内使用它们:

Factory.define :user do |user|
  # ...
  user.sequence(:user_login) { |n| "person=#{n}" }
end

或更短

Factory.define :user do
  # ...
  sequence(:user_login) { |n| "person=#{n}" }
end

然后,将用户与教师联系起来:

Factory.define :teacher do
  association :user
end

然后你可以打电话

@teacher = Factory(:teacher)

将自动使用序列中的下一个user_login创建关联用户。

答案 1 :(得分:0)

我解决了这个问题。

@teacher = Factory( :teacher, 
                    :user => Factory(:user, :user_login => Factory.next(:user_login)) )