3

我有一个 Note 模型,它可以包含图像链接附件(linktype = "image" 或一些文本(linktype = "text)。当我显示注释时,显示方法会根据链接类型而变化。一个例子是:

<% @notes.each do |q| %>
    <h2 class="title"><%= q.name %></h2>
    <% if q.linktype == "other"%>
        <script type="text/javascript">some javascript</script>
    <% elsif q.linktype == "text"%>
        <%= q.text %>
    <% elsif q.linktype == "image"%>
       <img src="<%= q.link %>" />
    <% end %>
<% end %>

我必须在我的站点中以几个不同的视图显示注释,因此我不想多次重复查看代码,而是希望将它放在一个地方并从不同的视图中引用它。

我最初的想法是将显示代码放在帮助程序中,如下所示:

<% @notes.each do |q| %>
    note_display(q.linktype, q.link)
<% end %>

但有些显示涉及 javascript(第一个代码块中的第 4 行)。即使我需要它来返回 javascript,我仍然可以使用辅助方法吗?如果是这样,我该怎么做?谢谢阅读。

4

2 回答 2

10

javascript 没有什么特别之处,您可以从帮助程序返回它,就像返回其他 html 内容一样。我唯一建议的是将助手用于标签,例如

image_tag(q.link)
javascript_tag("some javascript")
content_tag("h2", q.name, :class => "title")
于 2010-07-22T12:21:01.157 回答
3

就 ERB 而言,JavaScript 只是字符串内容,就像模板呈现的任何其他内容一样。所以你的辅助方法可以构造并返回一个字符串:

def note_display(note)
  content = ''
  content << content_tag('h2', h(note.name), :class => 'title')
  if note.linktype == 'other'
    content << javascript_tag("some javascript")
  elsif note.linktype == 'text'
    content << h(note.text)
  elsif note.linktype == 'image'
    content << image_tag(note.link)
  end  
  content
end

您可以使用以下辅助方法:

<% @notes.each do |n| %> 
  <%= note_display(n) %>
<% end %>
于 2010-07-22T13:21:09.473 回答