我有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) )
它不起作用。
答案 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)) )