【问题标题】:Multiple render errors多个渲染错误
【发布时间】:2018-08-12 23:43:52
【问题描述】:

这已经被问过很多次了,但我发现我认为解决方案的一个答案没有帮助。它指向了这个article,但也许我没有正确应用它。

代码情况如下: 好的,我正在控制器中执行以下操作:

def create

   # some code
   create_record and return
end

private

  def create_record

      begin
          curr_user.events.build(#lots of fields).save!
      rescue
          render head :internal_server_error and return true
      end

      render head:ok and return true
  end

但我的日志中出现以下错误:AbstractController::DoubleRenderError。错误消息后指出的违规行是对 create_record 的调用、救援块的开头和救援块中的渲染。

【问题讨论】:

  • 哪里出错了?你告诉我们有一个错误。
  • @Makoto 更新答案
  • 每个动作只保留一个渲染。移除 create_record 依赖,只使用你的 create 方法。

标签: ruby-on-rails


【解决方案1】:

问题是,当您从方法create_recordreturn 时,它只从该方法返回,不是调用此方法的实际操作。

所以,你 render head :internal_server_errorrender head: :ok 在方法 create_record 中并从那里返回。控制返回到操作create,按照惯例,它尝试渲染模板create。因此,AbstractController::DoubleRenderError

要解决此问题,我建议您将代码更改为以下内容:

def create
  begin
    create_record
  rescue
    head :internal_server_error and return true
  end

  head :ok
end

private

def create_record
  curr_user.events.build(#lots of fields).save!
end

警告:检查head :ok 的语法。我不确定这个..

【讨论】:

  • 感谢您的回复。救援块内的 head 语句不起作用三。所以,在我设置error = false的块之前。在救援部分,我设置了error = true。然后在块if error head :internal_server_error else head :ok之后
猜你喜欢
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
  • 1970-01-01
  • 2021-12-01
  • 2013-04-16
  • 2014-07-10
  • 1970-01-01
相关资源
最近更新 更多