我在seeds.rb中创建了一堆数据用于开发目的。现在我意识到当新用户在我的网站上注册时,我基本上需要默认创建相同的数据,因此他没有空帐户。最好的方法是什么?
在我的seeds.rb中,我正在为它创建一个测试用户和一堆对象。我可以以某种方式将用户ID传递给Rails.application.load_seed
吗?或者有更好的方法吗?
答案 0 :(得分:2)
您不应在创建用户时调用seeds.rb
。相反,seeds.rb
应使用生产应用使用的相同方法创建初始User
相关模型。
我可以看到至少两个问题的解决方案:
使用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')
。相关对象将自动创建。
创建一个服务对象UserRegistrationService
,负责创建User
及其相关对象,例如:
class UserRegistrationService
def call(user_params)
user = User.create!(user_params)
ApiKey.create!(user: user)
user
end
end
在这种情况下,seeds.rb
应该使用该服务来创建用户。您应该拨打User#create!
。
UserRegistrationService.new.call(login: 'test1')
醇>