Ruby (on rails): how to combine an array?

I have:

@layout = [:maincol => ['a'], :sidecol => []]

then I want to execute a loop and get:

<div class="maincol"><div class="a"></a></div>
<div class="sidecol"></div>

How should I do it?

+3
source share
4 answers

First of all, this is a ruby ​​question, not a ruby ​​rail. Secondly, there are several conventions in Rails.And @layoutcertainly confuse other programmers, :maincoland :sidecol- quite a bad name, and they should be the ,.

<div class="maincol"><% @layout[:maincol].each do |element| %>
   <%= "<div class="%s"></div>" % element %>
<% end %></div>
<div class="sidecol"></div>
+5
source
<% @layout.each |column| %>
  <%= column.each |outer,inner| %>
    <%= content_tag(:div, inner.empty? ? {} : content_tag(:div, {}, :class=>inner), class => outer) %>
  <% end %>
<% end %>

Assuming you really need a tag divin the inner loop, and a </a>typo in the question.

+4
source

:

@layout = [{:maincol => ['a']}, {:sidecol => []}] # I'm assuming this was the explicit data structure you meant

html = @layout.map do |s|
  s.map do |k,v|
    contents = (v.map{|ss| content_tag('div', '', :class => ss)} unless v.empty?) || ''
    content_tag('div',  contents, :class => k)
  end
end.join('')

, @layout, , .

+2

Source: https://habr.com/ru/post/1744707/


All Articles