Rails:在模型中生成自定义HTML的最佳实践是什么?

3
我允许用户嵌入来自Youtube、Google、Vimeo等网站的视频。我考虑了最佳和最安全的方法(我不希望他们能够包含任何flash,我也希望限制视频网站,排除免费色情网站等)。
所以我认为最好最简单的方式是让用户只需将视频的URL复制粘贴到文本框中,将其存储在ExternalVideo模型中,然后生成所需的HTML以嵌入视频。
因此,我的ExternalVideo模型有一个名为“embed_html”的函数,应返回适当的HTML。
当然,我也可以这样做:
def embed_html
  # just a very short example to make my point
  "<embed src='#{@video_source}'>" 
end

但我认为这是不好的实践,也很难读懂。

我的问题:是否有工具/宝石/内置函数可以用来生成自定义HTML,类似于视图助手(link_to、image_tag等)?

谢谢你的帮助!

3个回答

4
我会执行以下操作。
def embed_element(external_video)
  content_tag(:embed, '', :src => external_video.video_source)
end

您可能需要查看文档以获取有关内容标记方法的更多信息。

还要注意,content_tag()方法将插入一个闭合标签。您似乎忘记了这一点...


谢谢,这正是我想要的。我的示例只是为了清楚表达我的意思,当然我的嵌入代码会更加复杂,并且有闭合标签... - Ole Spaarmann
如果你想要更复杂的功能,你可能还想了解一下'markaby'。 - Pieter Jongsma

1

你几乎回答了自己的问题。使用帮助方法:

def embed_html url
  "<embed src='#{url}'>" 
end

并在视图中使用它:

<%= embed_html @video_source %>

这并不是我所问的。我正在寻找一种生成更复杂HTML代码的方法。我不想在我的问题中写下完整的示例,但如果您检查视频网站的嵌入代码,它要比我发布的那个单行代码复杂得多。 - Ole Spaarmann
你可以使用帮助方法编写任意复杂的HTML。所以我可能不理解你的问题,看其他答案,他们也不明白。或许你可以提供更好的解释。 - klew
我的观点是:我不想在一个长的、硬编码的HTML字符串中使用#{param}插入参数,因为当嵌入代码像这样时,它将无法读取:“<object width="400" height="225"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5383150&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=00ADEF&fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5383150&server=vimeo.com&show_title=1&show_byl.... - Ole Spaarmann

0
为什么不编写一个视图辅助方法,接受一个ExternalVideo模型实例,请求其视频URL,然后返回HTML呢?

好主意,但我的问题是:如何在不使用非常冗长且难以阅读的字符串的情况下返回HTML?这个问题也适用于使用帮助方法。 - Ole Spaarmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接