【问题标题】:In Rails, how can I make a loop helper?在 Rails 中,如何制作循环助手?
【发布时间】:2011-08-01 05:56:11
【问题描述】:

假设我想创建一个 HTML 列表助手,它允许我遍历一个集合,并且仅在有任何列表项时输出 <ul><ol> 标记(我实际上想到的是有点讨厌,但这只是一个例子)。

类似:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    你可能想要这样的东西:

    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
    

    有多种方法可以构建最终的字符串,它的核心是您正在构建一个方法,该方法接受一个块并迭代一个可枚举对象并将该块应用于沿途的每个元素。

    【讨论】:

    • @Dan:谢谢,在通往 Strunk & White 的路上又迈出了一步,嗯?我真的很懂拼写,真的。
    • 我什至没有考虑yield!哦。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多