使用format.js重定向和呈现通知

时间:2015-02-05 15:09:42

标签: javascript ruby-on-rails ruby

我遇到过一种情况,我不确定是否可以更好地处理事情。

当使用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 %>");

虽然这感觉还不对。

更新2

我把它拼凑在一起,但请随意添加更清晰的解决方案,我真的想知道如何以最有效和正确的方式处理这个问题。

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

0 个答案:

没有答案