У меня есть приложение с двумя способами ввода данных: (1) одностраничная страница / поля form_with
[aka 'input_page'] и (2) страница загрузки файла [aka 'file_upload_page'], которая принимает электронная таблица с несколькими записями (здесь, студенческие курсы).
Моя цель состоит в том, чтобы сообщения об ошибках проверки появлялись в представлении, связанном с источником ввода, либо input_page, либо file_upload_page.
Контроллер курсов в настоящее время выглядит так:
def create
@user = current_user
@course = (Course.import(params[:course][:file]) ||
Course.new(course_params))
# the input is either a file (spreadsheet) or the aforementioned
# `form_with` fields
@course.save
respond_to do |format|
if @course.save
# when successful, both inputs return the same view,
# `courses_path`
format.html { redirect_to courses_path, notice: '...success!' }
format.json { render :show, status: :created, location:
courses_path }
else
# here is where the 'challenge' arises for the single input_page
format.html { redirect_to input_page, alert:
course.errors.full_messages }
# now, how do I *conditionally* return the file_upload_page if
# the user uploaded multiple courses with a spreadsheet
format.html { redirect_to file_upload_page, alert:
course.errors.full_messages }
end
(Загруженный файл электронной таблицы анализируется с использованием гема Roo в модели курсов, курсы сохраняются и возвращаются в контроллер курсов, создайте действие.)
В настоящее время, (1) при успешном сохранении либо input_page, либо file_upload_page - правильно - возвращает courses_path. (2) Если проверки не пройдены, и input_page, и file_upload_page возвращают представление input_page - потому что этот код запускается первым.
Мне нужно что-то в блоке else
, например, «если входные данные сделаны из вида X, возвращать вид X с ошибками, иначе возвращать вид Z с ошибками»