将嵌套消息帮助从div更改为无序列表

时间:2011-10-09 14:33:53

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

我在ancestry上使用来自ryan bates railcasts的辅助方法来显示嵌套消息(下面的代码完美无缺)。

def nested_messages(messages)
  messages.map do |message, sub_messages|
    render(message) + content_tag(:div, nested_messages(sub_messages), :class => "nested_messages")
  end.join.html_safe
end

上面的代码将各个div嵌入树状结构中。
我想把它变成无序列表,所以我所做的就是:

def nested_messages(messages)
    messages.map do |message, sub_messages|
        content_tag(:ul, :class => "") do
            render(message)
            content_tag(:li, :class => "nested_messages") do
                nested_messages(sub_messages)
            end
        end
    end.join.html_safe
end

生成的html看起来很好,但列表项不包含任何值。我做错了吗?

更新

我希望生成的html看起来像这样:

<ul>
    <li>Main Message</li>  <!-- first message -->
    <li>
        <b>Message 1</b>
        <ul>
            <li>Message 1 subchild 1</li>
            <li>Message 1 subchild 2</li>
        </ul>
    </li>
</ul>

更新2

我把它改成了这个并且它有效,多亏了戴夫:

def nested_messages(messages)
    messages.map do |message, sub_messages|
        #render(message) + content_tag(:div, sub_messages, :class => "nested_messages")
        content_tag(:ul, :class => "") do
            content_tag(:li, :class => "nested_messages") do
                render(message) + nested_messages(sub_messages)
            end
        end
    end.join.html_safe
end

1 个答案:

答案 0 :(得分:3)

您创建了一个ul标记,然后呈现该消息。如果你这样做,你的HTML会是什么样子?

ul内的内容应该是嵌套的li:您只需呈现消息。

您需要将其放在li标记中,以便无序列表包含有效内容。