Трудно найти ошибку в вашем коде.
Я не буду пытаться угадать, какая из строк допускает ошибки, вместо этого я дам вам несколько советов:
В среде Rails есть общее правило fat models - skinny controllers
.Для вашего кода это означает: оставьте только минимум над кодом, сгенерированным скаффолдингом.Вся бизнес-логика переходит в модели.Вы можете спросить, почему: есть несколько причин: вы можете повторно использовать свой код, гораздо проще провести модульное тестирование по модели, чем по контроллеру.
Я бы очень рекомендовал вам попробовать построить модульный тест для логики в вашей модели.Это гораздо эффективнее, чем отладка.Однако отладчик по-прежнему мощный инструмент, я использую отладчик из Rubymine.Отладчик дает возможность проверять состояние всех переменных при построчном выполнении приложения.
Одна вещь в вашем коде: чрезмерное использование ?
оператора
session[:user_role] != "administrator" ?
@itd = IngressTransportDocument.filtered_by_registry(session[:registry_id]).find(params[:warehouse][:ingress_transport_document_id]) :
@itd = IngressTransportDocument.find(params[:warehouse][:ingress_transport_document_id])
Менее читаемо, чем:
if session[:user_role] != "administrator" then
@itd = IngressTransportDocument.filtered_by_registry(session[:registry_id]).find(params[:warehouse][:ingress_transport_document_id])
else
@itd = IngressTransportDocument.find(params[:warehouse][:ingress_transport_document_id])
end if