Rails 3下的混合远程和非远程表单

时间:2012-08-25 12:08:51

标签: ruby-on-rails forms jquery

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

如何实施?我大致熟悉使用jQuery的AJAX,还有一些其他形式在网站上使用它,但我找不到创建混合表单的方法。

2 个答案:

答案 0 :(得分: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]存储提交按钮的字符串,因此您可以使用它来构建混合表单。

答案 1 :(得分: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,以清除表单。在实际代码中,我还做了一个flash来表明新对象已经创建。