Вырезать и получить три первых числа из идентификатора

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

Я использую Ruby on Rails. У меня есть рандомизированный идентификатор для модели, и я хочу получить первые три числа из идентификатора и как «код заказа» сохранить его в БД.

Моя модель состоит из: id, first_name, last_name и order_code.

Например, идентификатор равен 901233, тогда я хочу поместить 901 в order_code. Как этого добиться?

Заранее благодарю.

Ответ №1:

Ну, вы можете добиться этого, используя один из простых методов

  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] ^