Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:在使用live update/Faye时如何避免AbstractController::DoubleRenderError?_Ruby On Rails_Ruby_Exception Handling_Faye_Private Pub - Fatal编程技术网

Ruby on rails Rails:在使用live update/Faye时如何避免AbstractController::DoubleRenderError?

Ruby on rails Rails:在使用live update/Faye时如何避免AbstractController::DoubleRenderError?,ruby-on-rails,ruby,exception-handling,faye,private-pub,Ruby On Rails,Ruby,Exception Handling,Faye,Private Pub,我正在使用Private Pub,这是一个建立在Faye之上的宝石,通过我的控制器进行实时更新。我很难对实时更新渲染进行回退,以防Faye服务器无法提供服务 如果我的第一个渲染方法失败,是否仍有必要绕过这种情况进行第二次渲染 以下是我的创建操作: def create #assigning objects and such happening here begin LiveAjaxRender(@comment) rescue => excep

我正在使用Private Pub,这是一个建立在Faye之上的宝石,通过我的控制器进行实时更新。我很难对实时更新渲染进行回退,以防Faye服务器无法提供服务

如果我的第一个渲染方法失败,是否仍有必要绕过这种情况进行第二次渲染

以下是我的
创建
操作:

  def create
    #assigning objects and such happening here

    begin
        LiveAjaxRender(@comment)
    rescue => exception
        ExceptionNotifier.notify_exception(exception)

        normalAjaxRender(@comment)
    end # end rescue
  end
通常,当错误发生时,它应该转到第二个块并忽略第一个块。但这里没有,因为上面说:

user\u comments\create
中出现了
AbstractController::DoubleRenderError

在此操作中多次调用渲染和/或重定向。 请注意,您最多只能调用render或redirect 每个动作一次。还要注意,重定向和渲染都不会终止 操作的执行,因此如果要在 重定向,您需要执行类似“重定向到(…)和 返回”。app/controllers/my_controller.rb130:in`block (2级)在normalAjaxRender'中


为了避免渲染的冗余,我做了以下工作:


normalAjaxRender()
方法设置为默认方法,并在
JS
文件中添加
rescue
liveupdate

normalAjaxRender
中尝试进行双重渲染。。从错误消息中可以清楚地看到这一点。检查其中的逻辑。这是我在方法
def normalAjaxRender(post)
@post=comment
if@post.save
respond_to do | format |
format.html{}
format.js render:posts}
结束
其他
呈现:新建
结束
结束
确定。。把它放在柱子里。。。在这里,您进入响应,您也在进行渲染。。这是不允许的,因此您出现了错误。@ArupRakshit,谢谢您的解释,我正在尝试使操作do 1呈现而不是两个。如果第一次渲染失败,那么我想让第二次渲染方法工作。也许我的问题还不够清楚,但我想知道如何选择其中一个。