假设我想创建一个HTML列表帮助器,它允许我遍历一个集合,只有在有任何列表项时才会输出<ul>
或<ol>
标签(我实际拥有的内容)记住是有点肮脏,但这可以作为一个例子。
类似的东西:
<% html_list(:ul, MyModel.all) do |my_model| %>
<span><%= my_model.id %></span>
<% end %>
(正如你所知,我迷路了。)
我无法理解我的html_list
方法中的内容。你介意指点我正确的方向吗?
答案 0 :(得分:4)
你可能想要这样的东西:
def html_list(tag, enum)
html = '<' + tag.to_s + '><li>'
html << enum.map { |e| yield e }.join('</li><li>')
html << '</li></' + tag.to_s + '>'
html.html_safe
end
或者也许这样:
def html_list(tag, enum)
html = [
'<' + tag.to_s + '>',
'<li>',
enum.map { |e| yield e }.join('</li><li>'),
'</li>',
'</' + tag.to_s + '>'
]
html.join.html_safe
end
有多种方法可以构建最终的字符串,其中很重要的是你正在构建一个方法,它接受一个块并迭代一个可枚举的方法,然后将块应用于每个元素。