【问题标题】:Rails 3 - Factory girl and sequence for belongs_to tableRails 3 - 工厂女孩和 belongs_to 表的序列
【发布时间】:2012-04-07 13:06:36
【问题描述】:

我有 2 个模型 - UserTeacherTeacher属于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)  ) 

而且它不起作用。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我解决了。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多