2016-05-08 11 views
0

私はrefactor私のseeds.rbファイルを探しています。そのため、データを入力するためにはgem fakerに大きく依存しています。Faker gem with seeds.rb

まず私はこのように、ユーザーが生成しています:しかし、私は構文エラーを取得しています

# --== Generate Sample Users 
    user_list = [ 
    [ "Name", "Lastname", "Password", 't', "[email protected]", "Password"], 
    [ "Mortimer", "Snerd", "Secret", 'f', "[email protected]", "Secret"] 
    5.times.do 
     name = Faker::Name.first_name 
     surname = Faker::Name.last_name 
     password = Faker::Internet.password(10) 
     [ name, surname, 'f', Faker::Internet.email(name + "." + surname), 'f', password, password] 
    end 
    ] 
    user_list.each do |name, surname, admin, email, password, password| 
     User.create(name:name, surname:surname, admin:admin, email:email, password:password, password_confirmation:password) 
    end 

unexpected tINTEGER, expecting ']' 5.times.do

私はここで間違って何をしているのですか?

+0

ヒント: 'user_list'宣言の最後に'] 'が来ることを期待しています。 – tadman

答えて

1

まず、5.times.doは有効な構文ではありません。 5.timesはEnumerableオブジェクトを返しますが、doはメソッドではありません。ここでブロックとしてdoを使用することを意味すると思います。

また、timesにブロックを渡すと、配列を返しません。あなたが実際にあなたが、あなたのuser_list配列最後に

user_list = [ 
    [ "Name", "Surname", "Password", 't', "[email protected]", "Password"], 
    [ "Mortimer", "Snerd", "Secret", 'f', "[email protected]", "Secret"] 
] 

5.times.do 
    name = Faker::Name.first_name 
    surname = Faker::Name.last_name 
    password = Faker::Internet.password(10) 

    # Add user to user_list 
    user_list << [ name, surname, 'f', Faker::Internet.email(name + "." + surname), 'f', password, password] 
end 

user_list.each do |name, surname, admin, email, password, password_confirmation| 
    User.create(name: name, surname: surname, admin: admin, email: email, password: password, password_confirmation: password_confirmation) 
end 

をも変更していないので、それだけで、最後の項目はブロックから返さ返します電子メールのためにFakerを使い果たして、createの代わりにfind_or_createの代わりに使用して、指定された電子メールが既に存在する場合には作成を防止してください。あなたのseeds.rbは本当に冪等でなければなりません(複数回実行すると副作用がないはずです)。

+0

Fakerの代わりに何をお勧めしますか? – Matteo

+0

'5x.do'のブロックに' i'を渡し、 'email =" seeduser#{i}@example.com "'のようなものを使用してください。その後、 'User.find_or_create_by(email:email、...)'を使用して、毎回新しいユーザを作成しないようにします。 –

+0

なぜ、次のようなことはしませんか? '5.times.do | I |' ' 名=偽物:: Name.first_name' '姓=偽物:: Name.last_name' 'パスワード=偽物:: Internet.password(10)' ' foo、 'f'、パスワード] ' ' end' – Matteo

関連する問題