#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
Я использую Ruby on Rails. У меня есть рандомизированный идентификатор для модели, и я хочу получить первые три числа из идентификатора и как «код заказа» сохранить его в БД.
Моя модель состоит из: id, first_name, last_name и order_code.
Например, идентификатор равен 901233, тогда я хочу поместить 901 в order_code. Как этого добиться?
Заранее благодарю.
Ответ №1:
Ну, вы можете добиться этого, используя один из простых методов
-
Выньте первые 3 символа из строки
901233.to_s[0..2] #=> "901" 901233.to_s.chars.first(3).join #=> "901"
Редактировать
Из комментария @ cary’s
901233.to_s.each_char.first(3).join
чтобы избежать создания временного массива
Комментарии:
1. Небольшой момент. Вы могли бы написать свой второй метод
901233.to_s.each_char.first(3).join
. Ваш второй метод создает временный массив901233.to_s.chars
(по которомуArray#first
вызывается). Вы можете избежать создания этого массива, заменивchars
наeach_char
, и в этом случаеEnumerable#first
вызывается перечислитель, возвращаемыйeach_char
.
Ответ №2:
Если ваш идентификатор является переменной, вы можете его усечь:
In [101]: id = "901233"
In [102]: id[0:3]
Out[102]: '901'
Если это число, вы можете преобразовать его и сделать то же самое:
In [105]: str(id)[0:3]
Out[105]: '901'
Так что вы могли бы просто сделать:
order_code = str(id)[0:3]
Ответ №3:
в вашем model.rb
before_create do
self.order_code = id.to_s[0..2]
end
Комментарии:
1. Я получил эту ошибку: синтаксическая ошибка, неожиданный ‘:’, ожидающий ‘]’ subid = id[0: 3] ^