Это код для моего отображения создания:
def create
@display = @department.displays.new(display_params)
@token = @display.build_token(value: (max_token + 1) , status: 0)
if @display.save
....
end
max_token - это метод, вызываемый для поиска наибольшего количества токенов в токенах дисплея.
def max_token
@tokens = @department.displays.map do |display|
display.token.value
end
@tokens.max
end
Проблема
Я создал новый дисплей для отдела с кодом в методе создания.
@display = @department.displays.new(display_params)
Но он еще не сохранен, так как @display.save вызывается только после метода max_token .
Но когда вызывается метод max_token , код
@tokens = @department.displays.map do |display|
также отображает несохраненный дисплей отдела.
И поскольку токен дисплея еще не установлен, так как он не сохранен, выдается ноль значение ошибка.
Мое решение
Это то, что я пробовал до сих пор, но я хочу знать, есть ли лучший метод .
def max_token
@tokens = @department.displays.map do |display|
if display.token.nil?
display.token.value
else
0
end
end
@tokens.max
end