如何与工厂女孩一起创建独特的字符串(没有数字)?

Sta*_*ers 14 ruby ruby-on-rails factory-bot

或者是生成随机和唯一用户名所必需的外部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
Run Code Online (Sandbox Code Playgroud)

使用序列方法适用于id,profile_name和email,但我的REGEX验证意味着名字和姓氏自动无效,因为它们中有一个数字.与独特性无关.

那么我该如何创建这些独特的名字呢?

Sim*_*tti 17

生成随机字符串有无限可能的解决方案,而不依赖于第三方宝石.

这是一个

('a'..'z').to_a.shuffle.join
# => "sugrjtyoiqlbxkzcfnawdhpevm"
Run Code Online (Sandbox Code Playgroud)

factory :user_4 do
  sequence(:id) { |n| n }
  first_name { "Gemini" + random_name }
  # ...
end

def random_name
  ('a'..'z').to_a.shuffle.join
end
Run Code Online (Sandbox Code Playgroud)

如果随机因素太低,则可能会增加复杂性.


小智 16

factory :user_4 do
  # ...
  sequence(:first_name, 'a') { |n| "Gemini" + n }
  sequence(:last_name, 'a') { |n| "Pollux" + n }
  # ...
end
Run Code Online (Sandbox Code Playgroud)

FactoryGirl的#sequence方法接受第二个参数作为其起始值.这可以是String,Fixnum或支持通过#next方法递增的其他内容.

具有'a'序列的起始值将是a, b, c ... z, aa, ab, ac ...

  • 最佳答案!你也可以用'A'来做'A,B ...... Z,AA,AB ...`. (2认同)