Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何防止faker gem在ruby on rails中无法通过用户名唯一性验证?_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 3.1_Rubygems - Fatal编程技术网

Ruby on rails 如何防止faker gem在ruby on rails中无法通过用户名唯一性验证?

Ruby on rails 如何防止faker gem在ruby on rails中无法通过用户名唯一性验证?,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,rubygems,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,Rubygems,使用faker用假用户填充我的数据库,我有一个验证规则,确保用户名是唯一的,不能注册多次 当我运行rakedb:populate时,它永远不会达到1000,因为我使用的是create!它向我显示了我需要看到的内容,即:Usernname已经注册 我的问题是,有没有一种方法可以将一个数字添加到用户名中,并且每次返回时,该数字都会增加?这样,任何用户名都不会相同 e、 g 约翰1 彼得2 莎莉3 史密斯4 luke5 约翰6 莎莉7 等等 或者是否有其他方法确保用户名不会出现多次 namespac

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

当我运行rakedb:populate时,它永远不会达到1000,因为我使用的是create!它向我显示了我需要看到的内容,即:Usernname已经注册

我的问题是,有没有一种方法可以将一个数字添加到用户名中,并且每次返回时,该数字都会增加?这样,任何用户名都不会相同

e、 g

约翰1 彼得2 莎莉3 史密斯4 luke5 约翰6 莎莉7

等等

或者是否有其他方法确保用户名不会出现多次

 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

您可以在循环中添加索引

1000.times do |n|
  username = Faker::Internet.user_name
  username = "#{username}_#{n}"
  ...
end
这对我有用。 不太清楚为什么“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

我不明白,你能解释/展示详细的例子吗?如果您不介意的话,
times
是一种方法,它接受一个块,并将a数字(每次执行该块时递增)传递到该块中——您可以将其称为任何东西,
n
number
count
。如果您不熟悉Ruby块,请查看(以及更多内容——在Google上搜索
Ruby块
)。为什么您要将这些行分开,而不只是执行username=“#{Faker::Internet#u user#name}{n}”?@jason只需与问题中的代码进行清晰/对比。“n”值是数字,因为“100.times”在Ruby中计算为数字。如果您有\@transactions=Transaction.all,然后是\@Transaction do | t |,那么块中的“t”值将是事务对象。