Как добавить левый и правый классы к каждому другому элементу в цикле в Ruby on Rails? - PullRequest
2 голосов
/ 28 февраля 2012

Я работаю в приложении Ruby on Rails. У меня есть цикл, который создает div, как это:

<% @snorks.each do |snork| -%>
  <div>
    <%= snork %>
  </div>
<% end %>

И мне нужно, чтобы вывод каждого плавающего элемента был плавающим влево или вправо следующим образом:

<div class="left">
  Allstar Seaworthy
</div>
<div class="right">
  Casey Kelp
</div>
<div class="left">
  Dimmy Finster
</div>
<div class="right">
  Daffney Gillfin
</div>
<div class="left">
  Tooter Shellby
</div>
<div class="right">
  Dr. / Uncle Galeo
</div>

Кроме того, мне нужно добавить div с class="clear" каждые два div, например:

<div class="left">
  Allstar Seaworthy
</div>
<div class="right">
  Casey Kelp
</div>
<div class="clear"></div>
<div class="left">
  Dimmy Finster
</div>
<div class="right">
  Daffney Gillfin
</div>
<div class="clear"></div>
<div class="left">
  Tooter Shellby
</div>
<div class="right">
  Dr. / Uncle Galeo
</div>
<div class="clear"></div>

Я исследовал и нашел несколько сообщений , в которых говорится, что альтернативные классы можно легко выполнить с помощью cycle(), и это работает. Однако, когда я использую его в двух местах внутри цикла, он перестает работать правильно и просто выводит что-то вроде этого:

<div class="left">
  Allstar Seaworthy
</div>
<div class="left">
  Casey Kelp
</div>
<div class="left">
  Dimmy Finster
</div>
<div class="left">
  Daffney Gillfin
</div>
<div class="left">
  Tooter Shellby
</div>
<div class="left">
  Dr. / Uncle Galeo
</div>

Каков наилучший способ в Ruby on Rails чередовать классы в цикле, а также добавлять что-то в каждый другой цикл?

Ответы [ 3 ]

7 голосов
/ 28 февраля 2012

Согласно документации , если вам нужны вложенные, вы называете их.В противном случае они оба будут иметь имя «default» и конфликтовать.

<% @snorks.each do |snork| -%>
  <div class="<%= cycle('left', 'right') -%>">
    <%= snork %>
  </div>
  <%= cycle('','<div  class="clear"></div>', :name=>"cleardiv") %>
<% end %>
1 голос
/ 28 февраля 2012

Лучше всего здесь использовать каждый с индексом. Таким образом, вы можете выполнить простую математическую процедуру, чтобы определить, является ли число нечетным или четным, и вывести правильный класс и добавить значения очистки.

@snorks.each_with_index do | snork, index|
   If index%2 == 0 
      class = 'left'
   else
      class = 'right'
   end

Ну, вы поняли меня, и я разговариваю по телефону.

1 голос
/ 28 февраля 2012

использовать помощник цикла

http://apidock.com/rails/ActionView/Helpers/TextHelper/cycle

<% @snorks.each do |snork| -%>
  <div  class="<%= cycle("left", "right") -%>">
    <%= snork %>
  </div>
<% end %>

Редактировать: для добавления нового div; следующее может помочь

<% @snorks.each_slice(2) do |snork_batch| -%>
 <% snork_batch.each do |snork|%>
  <div  class="<%= cycle("left", "right",:name=>"className") -%>">
    <%= snork %>
  </div>
<%end%>
<div  class="clear"></div>
  <% reset_cycle("className")%>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...