Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

260
Views
¿Cómo puedo generar valores de secuencia de caracteres de letras combinados y dígitos numéricos en FactoryBot?

Necesito generar secuencias de etiquetas que se parezcan a "ABC1" y "XYZ9", siempre tres letras seguidas de un solo dígito. Quiero que ambas partes de la etiqueta se incrementen lógicamente y que siempre tengan el formato y la longitud exactos.

Empecé con:

 sequence(:code) { |n| "ABC#{n}" }

Eso estuvo bien, pero después de la novena etiqueta ( ABC9 ) pasó a ( ABC10 ), violando mi formato y solo produciendo 10 (¿o 9?) valores.

Una solución rápida de usar la secuencia para las letras y codificar un dígito hace que mi problema de reinversión no ocurra para 26^3 => 17,576 instancias, lo que podría estar bien. Pero también quiero cierta variabilidad en el dígito. Un dígito aleatorio probablemente sería lo suficientemente bueno... pero quiero todos los valores disponibles.

Pensé en algunas formas algo torpes de construir la cadena a partir de una o dos secuencias para obtener valores completos que siempre coincidieran con el formato, pero parecían torpes.

¿Existe una forma elegante en FactoryBot de crear una cadena secuenciada con un segmento de letras de ancho fijo seguido de un segmento numérico de ancho fijo que produzca todos los valores posibles?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Solo rubí; sin rieles o lo que sea:

 code = "AAA0" 20.times{ puts code.succ! }
over 4 years ago · Santiago Trujillo Report

0

Resulta que la solución en una fábrica es sublimemente simple y elegante:

 sequence(:code, 'AAA1')

Esto produce la siguiente secuencia:

 FactoryBot.build :code => #<Code code: "AAA1"> => #<Code code: "AAA2"> => #<Code code: "AAA3"> => #<Code code: "AAA4"> => #<Code code: "AAA5"> => #<Code code: "AAA6"> => #<Code code: "AAA7"> => #<Code code: "AAA8"> => #<Code code: "AAA9"> => #<Code code: "AAB0"> => #<Code code: "AAB1"> => #<Code code: "AAB2"> ... four hours later ... => #<Code code: "ZZY7"> => #<Code code: "ZZY8"> => #<Code code: "ZZY9"> => #<Code code: "ZZZ0"> => #<Code code: "ZZZ1"> => #<Code code: "ZZZ2"> => #<Code code: "ZZZ3"> => #<Code code: "ZZZ4"> => #<Code code: "ZZZ5"> => #<Code code: "ZZZ6"> => #<Code code: "ZZZ7"> => #<Code code: "ZZZ8"> => #<Code code: "ZZZ9"> => #<Code code: "AAAA0"> => #<Code code: "AAAA1">

Para mis necesidades, no me preocupa el traspaso total después de 175.760 valores.

También vale la pena señalar que puede comenzar cada segmento donde lo desee. Esto funciona igual de bien:

 sequence(:code, 'ABC9') FactoryBot.build :code => #<Code code: "ABC9"> => #<Code code: "ABD0"> => #<Code code: "ABD1">
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!