Редактировать действие, которое создает и сохраняет новый объект вместо обновления существующего - как отображать ошибки? - PullRequest
0 голосов
/ 05 апреля 2019

В моем приложении у меня есть модель курса. По нескольким причинам действие редактирования не должно обновлять существующий курс, а должно создавать и сохранять новый.

В настоящее время в моем CoursesController у меня есть следующие методы:

def edit
  find_course
end

def update
  @course = Course.new(permitted_params)
  if @course.save
    redirect_to courses_path, notice: 'Course was updated'
  else
    find_course
    render :edit
  end
end

private

def find_course
  @course = Courses.find(params[:id])
end

А просмотров:

edit.html.erb

<div class="row">
  <div class="col-md-10"><h3> Edit <%= @course.title %> </h3></div>
</div>

<div>
  <%= render 'form', url:  
  course_path(@course) %>
</div>

_form.html.erb

<%= form_for @course, url: url, :html => { class: "form-horizontal" } do |f| %>
  <% if @course.errors.any? %>
    <div id="error_expl" class="panel panel-danger">
      <div class="panel-heading">
        <h3 class="panel-title"><%= pluralize(@course.errors.count, "error") %> prohibited this Course from being saved:</h3>
      </div>
      <div class="panel-body">
        <ul>
        <% @course.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
        </ul>
      </div>
    </div>
  <% end %>

Мой код делает то, что ожидается: когда пользователи редактируют курс, фактически создается новый курс. Проблема в том, что при таком подходе я не могу отображать ошибки, если действие обновления завершается неудачно, что является нормальным в этом подходе, потому что в другом объекте оператора, содержащем эту информацию, больше нет доступа.

Мой вопрос: что лучше, рекомендовано лучшими практиками и подходом опытных разработчиков к:

  • отображать ошибки в моем решении?
  • как мне изменить свой подход, чтобы он был реализован лучше?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...