在Rails中,如何创建循环助手?

时间:2011-08-01 05:56:12

标签: ruby-on-rails ruby-on-rails-3 helper helpers

假设我想创建一个HTML列表帮助器,它允许我遍历一个集合,只有在有任何列表项时才会输出<ul><ol>标签(我实际拥有的内容)记住是有点肮脏,但这可以作为一个例子。

类似的东西:

<% html_list(:ul, MyModel.all) do |my_model| %>
  <span><%= my_model.id %></span>
<% end %>

(正如你所知,我迷路了。)

我无法理解我的html_list方法中的内容。你介意指点我正确的方向吗?

1 个答案:

答案 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

有多种方法可以构建最终的字符串,其中很重要的是你正在构建一个方法,它接受一个块并迭代一个可枚举的方法,然后将块应用于每个元素。