0

在我的应用程序中,我有一个包含两个提交的表单:一个是典型的提交按钮,它创建一个对象并将用户重定向到它。另一个旨在充当“保存并继续”按钮,该按钮远程创建对象,显示成功闪烁,并清除表单而不将用户发送到不同的页面。

这将如何实施?我对带有 jQ​​uery 的 AJAX 大致熟悉,并且有一些其他形式在整个站点中使用它,但我找不到创建混合表单的方法。

4

2 回答 2

1

这不是一个漂亮的方法,但这有效。在create控制器中的操作上,当您完成保存记录时,您可以放置​​一些条件逻辑来实现不同的重定向,如下所示:

respond_to do |format|
  if @model.save
    if params[:commit] == "Save"
      # Redirect to saved object
    elsif params[:commit] == "Save and Continue"
      # Redirect to other places
    end
  end
end

存储提交按钮的params[:commit]字符串,因此您可以使用它来构建混合表单。

于 2012-08-25T12:34:44.697 回答
0

MurifoX 的答案是正确的。这是我所做的事情:

  if @model.save
    if params[:commit] == "Save"
      render js: %(window.location.pathname='#{object_path @object}')
    elsif params[:commit] == "Save and Continue"
      respond_to do |format|
        format.js do
          @object = Object.new
          render 'new'
        end
      end
    end
  end

基本上,表单已将远程设置为 true 以正确响应 AJAX 请求(jQuery.ajaxSetup({ 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")} 也被使用)。如果单击“保存”,浏览器将通过 JavaScript 重定向到相应的页面。如果单击“保存并继续”,则用于加载表单的相同 _partial.js.erb 会再次 AJAX用一个新对象来清除表单。在实际的代码中,我还做了一个闪烁来显示新对象已经创建。

于 2012-08-26T06:38:10.860 回答