Я создаю приложение простого менеджера активов в Rails 4.2.2 и Ruby 2.2.2. В моей asset
модели я использую функцию обратного вызова с before_create
для вызова функции generate_asset_number
как такundefined метод `split 'for nil: NilClass Rails
def generate_asset_number
company = "AMS"
if Asset.count == 0
self.asset_number = "#{company}-00001"
else
last = Asset.last.asset_number
end
number = last.split('-')[1].to_i
number += 1
self.asset_number = company + '-' + "%05d" % number
end
end
Как вы можете видеть, я устанавливаю переменной компании в виде строки, оценки, если Asset.count равен 0, то возвращая строку «AMS-00001», если Asset.count не равен 0, я назначаю last Asset.last.asset_number, чтобы вывести последний номер в последовательности.
Где я получаю сработал с установкой переменной числа, чтобы вернуть последний номер инцидента и разделить на него вызов, чтобы извлечь вторую часть массива и преобразовать в целое число, чтобы я мог увеличить его.
Когда я запускаю это из консоли или попытаться создать новую запись в представлении, я получаю следующее сообщение об ошибке:
undefined method
раскола»для ноля: NilClass`
Я уверен, что мой синтаксис выключен, так как я больше из Ruby Jr.
Если кто-нибудь может помочь объяснить, что мне нужно сделать для рефакторинга и сделать эту работу, я был бы признателен. Если вам нужна дополнительная информация или если мой вопрос не ясен, сообщите мне.
Это отлично работает, извините, это очень рано для меня, и я делал ошибки newb. В то же время я реорганизовал что-то похожее на ваш ответ, но использовал опцию if. Так что это намного чище! Большое спасибо <3 – nulltek