2016-06-15 8 views
0

私は、開発のためにseeds.rbでたくさんのデータを作成しました。今では、新しいユーザーが自分のWebサイトにサインアップして空のアカウントを持っていないので、デフォルトで同じデータを作成する必要があることがわかりました。それをする最善の方法は何でしょうか?ユーザ作成時のRailsでのシード生産データ

私のseeds.rbでは、テスト用のユーザーとそのオブジェクトの束を作成しています。どういうわけか、ユーザーIDをRails.application.load_seedに渡すことはできますか?それとももっと良い方法がありますか?

答えて

2

ユーザー作成時にseeds.rbを呼び出すべきではありません。代わりに、seeds.rbは、本番アプリが使用するのと同じ方法を使用して、最初のUser関連モデルを作成する必要があります。

私はこの問題に少なくとも二つのソリューションを見ることができます:

  1. 関連するオブジェクトを作成するために、Userafter_createコールバックを使用してください。例:この場合

    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. は、例えば、オブジェクトUserの作成を担当するサービスオブジェクトUserRegistrationServiceを作成し、それが関連しています。:この場合

    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')に電話する必要があります。

関連する問題