如何阻止faker gem在ruby on rails上失败的用户名唯一性验证?

Lon*_*Guy 4 ruby rubygems ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

使用faker用假用户填充我的数据库,我有一个验证规则,确保用户名是唯一的,不能多次注册.

当我运行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
Run Code Online (Sandbox Code Playgroud)

亲切的问候

Mic*_*ley 10

您可以为循环添加索引.

1000.times do |n|
  username = Faker::Internet.user_name
  username = "#{username}_#{n}"
  ...
end
Run Code Online (Sandbox Code Playgroud)

  • `times`是一个方法,它接受一个块并传递一个数字,每次执行该块时都会递增到块中 - 你可以把它称为任何东西,`n`,`number`,`count`.如果您不熟悉Ruby块,请查看[本文](http://rubylearning.com/satishtalim/ruby_blocks.html)(以及更多 - 在Google上搜索"ruby blocks"). (2认同)

Lon*_*Guy 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
Run Code Online (Sandbox Code Playgroud)