В Rails, Несколько источников ввода (для создания), Условный возврат ввода ввода с ошибками? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть приложение с двумя способами ввода данных: (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 с ошибками»

1 Ответ

0 голосов
/ 10 мая 2018

В ваших параметрах указывается, загружен файл или нет, поэтому используйте эту логику для определения пути ошибок:

def create
  @user = current_user
  @course = Course.import(params[:course][:file]) || Course.new(course_params)
  if @course.save
    respond_to do |format|
      format.html { redirect_to courses_path, notice: '...success!' }
      format.json { render :show, status: :created, location: courses_path }
    end
  else
    errors_path = params[:course][:file] ? file_upload_page : input_page
      respond_to do |format|
        format.html { redirect_to errors_path, alert: course.errors.full_messages }
      end
  end
end   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...