编辑创建和保存新对象而不是更新现有对象的操作-如何显示错误?

时间:2019-04-05 13:27:49

标签: ruby-on-rails ruby-on-rails-5

在我的应用中,我有一个课程模型。由于多种原因,编辑操作不应更新现有课程,而应创建并保存一个新课程。

当前在我的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语句中包含此信息的对象不再可用。

我的问题是:最佳做法是什么,最好的做法是由最佳实践和经验丰富的开发人员推荐的:

  • 在我的解决方案中显示错误?
  • 我应该如何改变方法以更好地实施它?

0 个答案:

没有答案