或者是生成随机和唯一用户名所必需的外部gem?
这是我目前的工厂:
factory :user_4 do
sequence(:id) { |n| n }
sequence(:first_name) { |n| "Gemini" + n.to_s }
sequence(:last_name) { |n| "Pollux" + n.to_s }
sequence(:profile_name) { |n| "GeminiPollux" + n.to_s }
sequence(:email) { |n| "geminipollus" + n.to_s + "@hotmail.co.uk" }
end
使用序列方法适用于id,profile_name和email,但我的REGEX验证意味着名字和姓氏自动无效,因为它们中有一个数字。与独特性无关。
那我应该如何创建这些独特的名字?
答案 0 :(得分:17)
有infinite possible solutions生成随机字符串而不依赖第三方宝石。
这是一个
('a'..'z').to_a.shuffle.join
# => "sugrjtyoiqlbxkzcfnawdhpevm"
实施例
factory :user_4 do
sequence(:id) { |n| n }
first_name { "Gemini" + random_name }
# ...
end
def random_name
('a'..'z').to_a.shuffle.join
end
如果随机因素太低,则可能会增加复杂性。
答案 1 :(得分:14)
factory :user_4 do
# ...
sequence(:first_name, 'a') { |n| "Gemini" + n }
sequence(:last_name, 'a') { |n| "Pollux" + n }
# ...
end
FactoryGirl的#sequence
方法接受第二个参数作为其起始值。这可以是String,Fixnum或支持通过#next
方法递增的其他内容。
如果起始值为'a'
,则序列将为a, b, c ... z, aa, ab, ac ...
答案 2 :(得分:2)
factory :user_4 do
letters = [a,b,c,d]
sequence(:id) { |n| n }
sequence(:first_name) { |n| "Gemini" + letters[n] }
sequence(:last_name) { |n| "Pollux" + letters[n] }
sequence(:profile_name) { |n| "GeminiPollux" + letters[n] }
sequence(:email) { |n| "geminipollus" + letters[n] + "@hotmail.co.uk" }
end
或者只是使用ascii转换,或使用Faker gem