首页 > 解决方案 > Ruby on Rails - 使用原始参数在失败的控制器操作上重新呈现表单

问题描述

我有一个如下所示的控制器:

def update
  @expense_report = ExpenseReport.find(params[:id])
  @expense_report.status = "Submitted"

  respond_to do |format|
    if @expense_report.update(expense_report_params)
      ...
      ...
    else
      format.html { render :edit }
      ...
    end
  end 
end

我正在尝试在更新之前设置状态,以便减少执行的保存次数。我宁愿只进行一次保存。但是,当表单在保存失败时重新呈现时,它会使用原始参数重新呈现,并且状态设置为已提交,即使“已提交”不是原始参数之一。有没有办法只使用原始参数进行渲染?

标签: ruby-on-railsruby

解决方案


Rails 4.2 准确地介绍了您所需要的。在else块上,只需调用

@expense_report.restore_attributes

在渲染视图之前。它会成功的。


推荐阅读