在我的应用程序中,我有一个有两个提交的表单:一个是典型的提交按钮,它创建一个对象并将用户重定向到它。另一个用作“保存并继续”按钮,用于远程创建对象,显示成功闪存,并清除表单而不将用户发送到其他页面。
如何实施?我大致熟悉使用jQuery的AJAX,还有一些其他形式在网站上使用它,但我找不到创建混合表单的方法。
答案 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来表明新对象已经创建。