代码之家  ›  专栏  ›  技术社区  ›  Evan Carroll

为什么帮助者不应该在其中包含HTML?

  •  8
  • Evan Carroll  · 技术社区  · 16 年前

    我听说最好不要在你的助手中使用HTML;我的问题是,为什么不呢?此外,如果您试图生成一个HTML列表或类似的东西,我如何避免实际的标记?

    谢谢!

    -弗鲁

    6 回复  |  直到 12 年前
        1
  •  15
  •   RichH    16 年前

    我的建议-如果是小的HTML(几个标签),不要担心。更重要的是-考虑部分(因为在助手中将HTML字符串拉在一起是视图擅长的一种痛苦)。

    我经常在帮助程序中包含HTML(直接或通过调用rails方法,如link-to)。我的世界并没有崩溃。事实上,我要说的是,我的代码是非常干净、可维护和可理解的。

    就在昨天晚上,我写了一个链接“到用户帮助器”,用普通链接和旁边的用户图标吐出HTML。我本可以做一部分,但我认为链接用户是一个更干净的方式来处理它。

        2
  •  5
  •   Orion Edwards    16 年前

    我看不出有什么问题。大多数Rails帮助程序生成HTML代码(这是它们的目的)——对我来说,这意味着这就是你应该自己做的。

    然而,代码可读性问题一直存在。如果您有一个助手,它只是构建一个大的原始HTML字符串,那么它将很难理解。虽然可以在帮助程序中生成HTML,但您应该使用 content_tag render :partial 而不仅仅是 return %Q(<a href="#{something}">#{text}>)

        3
  •  2
  •   Sixty4Bit    16 年前

    这不是问题的完整答案,但您可以通过 content_tag 方法。我想为什么要保持代码的整洁。

    此外,Content_标记允许您在块中嵌套标记。看看这个 blog post on content_tag .

        4
  •  1
  •   Guilherme Garnier    13 年前

    在轨道3上可以使用 *HTMLI*Apple * 使助手方法返回不会转义的HTML标记的字符串方法。

        5
  •  0
  •   Misplaced    16 年前

    如前所述,帮助程序通常被认为是用作业务逻辑,用于执行驱动视图代码但不是视图代码本身的操作。最传统的放置生成视图代码片段的东西的地方是局部的。如果需要,分区可以调用一个助手,但是为了使事物保持分离,最好在助手中保留业务,在局部中保留视图。

    此外,记住这是所有的惯例,而不是硬性和快速的规则。如果有充分的理由打破惯例,那就做最有效的事。

        6
  •  -1
  •   Victor Pudeyev    12 年前

    我通常把HTML放在段落中。

    想想语义学。如果将HTML放入字符串中,则会失去它的语义方面:它将变为字符串而不是标记。非常不同。例如,不能验证字符串,但可以验证标记。

    我想把HTML放在助手中而不是部分(以及我如何找到这个线程)的原因是简洁的。我想能写 =hr 而不是 =render 'hr' .

    要回答我没有问的问题;-):要在帮助程序中取消对HTML的转义,请尝试此操作

    def hr
      raw '<hr />'
    end