4

fakeを使用して私のデータベースに偽のユーザーを設定し、ユーザー名が一意であり、複数回登録することができないようにする検証規則があります。ruby​​ on railsでfaker gemがユーザ名一意性検証に失敗するのを防ぐには?

rake db:populateを実行すると、1000に達することはありません。そこに到達する前にいつか停止します。なぜなら、私はcreateを使用しているからです!それは私が見てみたいことを私に示しています:Usernnameは既に登録されています。

私の質問には、ユーザー名に数字を追加する方法があります。数値が増えるたびに戻ってきます。そうすれば、ユーザー名は決して同じではありません。

john1 pete2 sally3 smith4 luke5 john6 sally7

等...

か確認してください何のユーザ名が複数回まで来ないようにする他のいくつかの方法がありますか?

namespace :db do 
     namespace :development do 
     desc "Create user records in the development database." 
     task :populate => :environment do 
      require 'faker' 

      1000.times do 

      User.create!(
      :username => Faker::Internet.user_name, 
      :email => Faker::Internet.email, 
      :password => "greatpasswordhuh" 
    ) 


      end 
     end 
     end 
    end 

種類は、あなたがあなたのループにインデックスを追加することができ

答えて

2

これは私に役立ちました。 「n」がなぜ数字を生成するのかは不明です。

namespace :db do 
     desc "Create user records in the development database." 
     task :populate => :environment do 
      require 'faker' 

      100.times do |n| 
      username = "#{Faker::Name.first_name}#{n}" 
      User.create!(
       :username => username, 
       :email => Faker::Internet.email, 
       :password => "greatpasswordhuh" 
      ) 

     end 
     end 
    end 
+0

"n"の値は数値です。なぜなら、 "100x"はRubyの数値を評価するからです。 \ @transactions = Transaction.allがあり、次に\ @transaction do | t |があった場合、ブロックの 't'値はTransactionオブジェクトになります。 – JosephK

10

について。

1000.times do |n| 
    username = Faker::Internet.user_name 
    username = "#{username}_#{n}" 
    ... 
end 
+0

私はそれを理解していない、あなたは説明することができます/詳細な例を示してください?あなたが気にしないのなら。 – LondonGuy

+2

'times'は、ブロックを受け取り、ブロックが実行されるたびにインクリメントされた数値をブロックに渡すメソッドです。これは' n'、 'number'、' count'と呼ぶことができます。 Rubyのブロックに慣れていない場合は、[こちらの記事](http://rubylearning.com/satishtalim/ruby_blocks.html)(さらにGoogleで 'ruby blocks 'を検索してください)をチェックしてください。 –

+0

username = "#{Faker :: Internet_user_name} _#{n}"の代わりに、なぜこれらの行を区切りますか? – Jason

関連する問題