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