Я довольно новичок в Rails, и у меня возникает проблема, с которой я не могу найти разрешение. Моя модель представляет собой RMA в системе. Когда вы создаете новый экземпляр модели, я бы хотел найти предыдущий номер RMA и создать новый. Конструкция RMA # выглядит как RMA-{year}-NNN
=>RMA-2015-001
.Rails инициализирует значение модели из базы данных
Мое текущее исполнение использует after_initialize
для достижения этой цели. Однако во время тестирования я заметил, что обращение к базе данных во время этого метода вызывает бесконечный цикл.
Это то, что мой код выглядит следующим образом:
after_initialize :after_initialize
def after_initialize
self.rma_number ||= generate_rma_number()
end
def generate_rma_number
new_rma_array = Array.new
new_rma_array.push("RMA")
new_rma_array.push(Time.now.year)
# Get the last RMA
last_rma = Rma.select(:rma_number).order('id desc').first
# If there is no RMA
if(last_rma == nil)
new_rma_array.push("001")
return new_rma_array.join('-')
end
# Split the string
current_rma_array = last_rma.rma_number.split('-')
# Increment the RMA
new_rma_array.push((current_rma_array[2].to_i + 1).to_s.rjust(3, '0'))
return new_rma_array.join('-')
end
Это не будет выполняться до тех пор, пока оно не будет сохранено в базе данных, правильно? Я как бы надеялся показать эту ценность пользователю, когда они создают RMA. Однако я полагаю, что это не совсем необходимо. – fortune
Вы можете проверить свой метод, если rma_number уже установлен –