1

我有 2 个模型 - UserTeacherTeacher属于_to UserUser拥有Teacher

所以,我使用工厂女孩宝石:

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)  ) 

它不起作用。

4

2 回答 2

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 的关联用户。

于 2012-04-07T13:32:37.343 回答
0

我解决了那个。

@teacher = Factory( :teacher, 
                    :user => Factory(:user, :user_login => Factory.next(:user_login)) )
于 2012-04-07T13:19:20.767 回答