我遇到过一种情况,我不确定是否可以更好地处理事情。
当使用remotipart通过ajax调用上传文件时,所有操作都由js执行
Processing by DocumentsController#create as JS
我无法使用js响应重定向页面,但之后我在这里找到了解决方案
if @document.save
format.html { redirect_to root_path, notice: success_save_msg }
format.js { render :js => "window.location.href='"+root_path+"'" }
else
format.html
format.js { render action: 'create.js.erb' }
end
所以页面会重定向,但如果我正在渲染html,我就不会像我那样得到通知。
是否有更好的方法来处理此问题或使用我当前的实施方式显示通知
到目前为止,我已经完成了这项工作(实质上我知道同样的事情,但认为在控制器中没有硬编码的重定向路径有点干净)
if @document.save
format.html { redirect_to root_path, notice: success_save_msg }
format.js { render action: 'redirect.js.erb }
else
format.html
format.js { render action: 'create.js.erb' }
end
redirect.js.erb
window.location.replace("<%= root_path %>");
虽然这感觉还不对。
我把它拼凑在一起,但请随意添加更清晰的解决方案,我真的想知道如何以最有效和正确的方式处理这个问题。
def create
@document = current_user.documents.new(document_params)
respond_to do |format|
if @document.save
format.html { redirect_to root_path, notice: success_save_msg }
format.js { flash[:notice] = 'File Successfully Uploaded'
render action: 'redirect.js.erb'
}
else
format.html
format.js { render action: 'create.js.erb' }
end
end