在我的应用中,我有一个课程模型。由于多种原因,编辑操作不应更新现有课程,而应创建并保存一个新课程。
当前在我的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 %>
我的代码完成了预期的工作:用户编辑课程时,实际上正在创建一个新课程。问题是使用这种方法时,如果更新操作失败,我将无法显示错误,这是正常的,因为在else语句中包含此信息的对象不再可用。
我的问题是:最佳做法是什么,最好的做法是由最佳实践和经验丰富的开发人员推荐的: