В моем приложении у меня есть модель курса. По нескольким причинам действие редактирования не должно обновлять существующий курс, а должно создавать и сохранять новый.
В настоящее время в моем 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 %>
Мой код делает то, что ожидается: когда пользователи редактируют курс, фактически создается новый курс. Проблема в том, что при таком подходе я не могу отображать ошибки, если действие обновления завершается неудачно, что является нормальным в этом подходе, потому что в другом объекте оператора, содержащем эту информацию, больше нет доступа.
Мой вопрос: что лучше, рекомендовано лучшими практиками и подходом опытных разработчиков к:
- отображать ошибки в моем решении?
- как мне изменить свой подход, чтобы он был реализован лучше?