Rails中的种子生产数据用户创建

时间:2016-06-15 05:06:32

标签: ruby-on-rails ruby ruby-on-rails-4

我在seeds.rb中创建了一堆数据用于开发目的。现在我意识到当新用户在我的网站上注册时,我基本上需要默认创建相同的数据,因此他没有空帐户。最好的方法是什么?

在我的seeds.rb中,我正在为它创建一个测试用户和一堆对象。我可以以某种方式将用户ID传递给Rails.application.load_seed吗?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您不应在创建用户时调用seeds.rb。相反,seeds.rb应使用生产应用使用的相同方法创建初始User相关模型。

我可以看到至少两个问题的解决方案:

  1. 使用after_create上的User回调来创建相关对象。例如:

    class User < ActiveRecord::Base
      after_create :generate_api_key
    
      private
    
      def generate_api_key
        ApiKey.create!(user: self)
      end
    end
    

    在这种情况下,您seeds.rb只能致电User.create!(login: 'test1')。相关对象将自动创建。

  2. 创建一个服务对象UserRegistrationService,负责创建User及其相关对象,例如:

    class UserRegistrationService
      def call(user_params)
        user = User.create!(user_params)
        ApiKey.create!(user: user)
        user
      end
    end
    

    在这种情况下,seeds.rb应该使用该服务来创建用户。您应该拨打User#create!

  3. ,而不是致电UserRegistrationService.new.call(login: 'test1')
相关问题