Ruby on Rails-使用原始参数重新呈现失败的控制器动作上的表单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

我正在尝试在更新前设置状态,因此可以减少执行的保存次数。我希望只保存一次。但是,在失败的保存中重新呈现表单时,即使“ Submitted”不是原始参数之一,也将使用原始参数和状态将其重新呈现为Submitted。有没有一种方法可以只使用原始参数进行渲染?

答案

之前检查是否有效

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

  respond_to do |format|
    if @expense_report.update(expense_report_params)
      ...
      ...
    else
      format.html  render :edit 
      ...
    end
  end
end
另一答案

Rails 4.2完全介绍了您所需要的。在else块上,只需调用

@expense_report.restore_attributes

呈现视图之前。它将解决问题。

以上是关于Ruby on Rails-使用原始参数重新呈现失败的控制器动作上的表单的主要内容,如果未能解决你的问题,请参考以下文章

在 Ruby on Rails/JS 中以模式呈现新表单而不是新页面

清除或重新创建 Ruby on Rails 数据库

Ruby on Rails 中的基本图像大小调整

ruby on rails 在关联调用中使用变量

在 AJAX 更新 Ruby on Rails 6 后,语义 UI 模式不会重新打开

使用 AJAX 请求下载文件数据 - ruby​​ on rails 3