Search code examples
ruby-on-rails-3content-tag

How to render nested messages using content_tag


I want to render nested ul li list using content_tag like

<ul>   <li>
    <div>Message1</div>    </li>    <li>
     <div>Message 2</div>
    </li> </ul>

I have helper method like this

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

I didn't get the nested list. My output looks like this

<ul>
  <li>
    <div>Message 1</div>
   </li>
</ul> 
<ul>
  <li>
    <div>Message 2</div>
  </li>
</ul>

Where I am doing wrong? How to get the correct nested list?


Solution

  • Nest the messages.map block inside the ul content tag block:

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