【问题标题】:"return render" vs "render ... and return" in RailsRails 中的“返回渲染”与“渲染......并返回”
【发布时间】:2016-06-14 11:22:35
【问题描述】:

写return render 'edit'和render 'edit' and return有什么功能上的区别吗?两种语法都可以安全使用吗?

return render 语法稍微简洁一些,但这里官方提倡render and returnAvoiding Double Render Errors。

return render 将返回渲染方法返回的任何值,render and return 将从控制器方法返回 nil。

【问题讨论】:

  • 另一个棘手的事情是使用render and return,不要使用render && return,尽管您的 Rubocop 可能不喜欢它。
  • Rubocop 确实标记了它并建议使用&&。 Rubocop 并不总是正确的。
  • 我个人认为return render更清晰,尤其是如果通话时间很长,而and最右边。从视觉上看,return render 非常清晰。
  • 请参阅this question,了解为什么要小心使用render "foo" && return。另请注意,您可以通过在渲染方法中添加括号来解决掉毛问题,如下所示:render("foo") && return

标签: ruby-on-rails controller


【解决方案1】:

你最后回答了你的问题:

return render 将返回 render 方法返回的任何值,并且 render 和 return 将从控制器方法返回 nil

重要的是您正在返回 - 这可以防止控制器操作中的任何其他代码运行 - 从而保护您免受双重渲染错误。我不相信任何东西实际上是在监听控制器动作的返回值。

如果我不得不猜测为什么首选方法是 and return,我会说它读起来像散文,这是 ruby​​ 方式。也就是说,听起来像是一句“渲染类别并返回”而不是“返回渲染类别”

【讨论】:

    【解决方案2】:

    Ruby 中的所有方法都返回与最后一个方法行相关的结果。 如果你想在不等待整个方法的情况下返回结果,可以使用关键字return返回值

    例子:

    def hello1
      'I m first' # executes but is never returned
      'I m second' # result
    end
    
    def hello2
      return 'I m first' # result
      'I m second' # this line will be never executeed
    end
    
    puts hello1
    # => 'I m second'
    puts hello2
    # => 'I'm first'
    

    render 方法的作用相同

    但是render方法写得像一个过程(它有结果,但结果是true),所以你可以在render调用之后直接return

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多