在我的应用程序中,我有一个包含两个提交的表单:一个是典型的提交按钮,它创建一个对象并将用户重定向到它。另一个旨在充当“保存并继续”按钮,该按钮远程创建对象,显示成功闪烁,并清除表单而不将用户发送到不同的页面。
这将如何实施?我对带有 jQuery 的 AJAX 大致熟悉,并且有一些其他形式在整个站点中使用它,但我找不到创建混合表单的方法。
在我的应用程序中,我有一个包含两个提交的表单:一个是典型的提交按钮,它创建一个对象并将用户重定向到它。另一个旨在充当“保存并继续”按钮,该按钮远程创建对象,显示成功闪烁,并清除表单而不将用户发送到不同的页面。
这将如何实施?我对带有 jQuery 的 AJAX 大致熟悉,并且有一些其他形式在整个站点中使用它,但我找不到创建混合表单的方法。
这不是一个漂亮的方法,但这有效。在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]
字符串,因此您可以使用它来构建混合表单。
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用一个新对象来清除表单。在实际的代码中,我还做了一个闪烁来显示新对象已经创建。