为什么帮助者不应该使用html?

我听说最好不要在帮助器中实际拥有任何HTML; 我的问题是,为什么不呢? 此外,如果你试图生成一个HTML列表或类似的东西,我怎么能避免实际的标签?

谢谢!

-fREW

我的建议 – 如果它是一小段HTML(几个标签),不要担心它。 更重要的是 – 考虑部分(在帮助器中将html字符串拉在一起是一种痛苦,这是观点擅长的)。

我经常在我的助手中包含HTML(直接或通过调用Rails方法,如link_to)。 我的世界并没有在我周围崩溃。 事实上,我甚至可以说我的代码非常干净,可维护且易于理解。

就在昨晚,我写了一个link_to_user帮助器,用于向用户发送普通链接以及旁边的用户图标。 我可以部分地完成它,但我认为link_to_user是一种更清洁的方式来处理它。

我没有看到它有任何问题。 大多数rails帮助程序生成HTML代码(这是他们的目的) – 对我来说这意味着你应该自己做的事情。

然而,存在代码可读性的问题。 如果你有一个帮助器只是构建一大串原始HTML,那么它将很难理解。 虽然在帮助程序中生成HTML很好,但您应该使用content_tagrender :partial类的东西,而不仅仅是return %Q(#{text}>)

这不是您问题的完整答案,但您可以通过content_tag方法在代码中创建html。 我的猜测为什么是清洁代码。

此外,content_tag允许您在块中嵌套标记。 查看content_tag上的这篇博文 。

在Rails 3上,您可以使用* html_safe * String方法使您的帮助方法返回不会被转义的html标记。

如前所述,通常认为帮助程序用作业务逻辑,用于执行驱动视图代码的操作,但不是视图代码本身。 放置生成视图代码片段的最常规的地方是部分的。 如果需要,Partials可以调用帮助程序,但为了保持分离,最好将业务保留在帮助程序中并在部分中查看。

另外,请记住这是所有惯例,而不是硬性规定。 如果有充分理由打破惯例,那么做最好的事情。

我通常把html放到局部。

想想语义。 如果你把html放在一个字符串中,你将失去它的语义方面:它变成了一个字符串而不是标记。 非常不一样。 例如,您无法validation字符串,但可以validation标记。

我想把html放在帮助器而不是部分(以及我如何找到这个线程)的原因是简洁。 我希望能够写=hr而不是=render 'hr'

要回答这个问题,我没有问;-):在帮助程序中取消转义HTML,试试这个

 def hr raw '
' end