Как сгенерировать строку кода последовательности в Rails - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть модель, у которой есть столбец с именем code, который является комбинацией столбца имени модели и ее идентификатора с ведущими нулями.

name = 'Rocky'
id = 16

У меня есть after_create обратный вызов, который запускает и генерирует код:

update(code: "#{self.name[0..2].upcase}%.4d" % self.id)

Сгенерированный код будет:

"ROC0016"

Код за работой.

Я нашел (%.4d" % self.id) из другого проекта, но я не знаю, как он работает.

Как он определяет количество нулей, которые должны предшествовать, на основе переданного целого числа.

Ответы [ 2 ]

3 голосов
/ 15 апреля 2020

Вы используете «спецификатор формата». Существует много спецификаторов, но тот, который вы используете, "%d", является десятичным спецификатором:

% запускает его. 4 означает, что он всегда должен использовать как минимум четыре числа, поэтому, если номер состоит только из двух цифр, он дополняется 0 s, чтобы заполнить оставшиеся числа. Второй % означает заменить 4d на то, что следует за ним. Так что в вашем случае 4d заменяется на "0016".

sprintf содержит больше информации о спецификаторах формата.

Вы можете прочитать больше о String#% в документации также.

1 голос
/ 15 апреля 2020

После знака процента ("%") идет десятичное число (".") и число. Это число является количеством всех цифр в результате. Если результат меньше этого значения, будут добавлены дополнительные нули.

Таким образом, в этом первом примере результат равен «34», а длина была установлена ​​на «4». Результат будет иметь два ведущих нуля, чтобы заполнить его четырьмя цифрами.

"This is test string %.4d" % 34
result => "This is test string 0034"

"I want more zeroes in my code %.7d" % 34
result => "I want more zeroes in my code 0000034"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...