Как добавить класс в рендер: частичный => @collection на каждый 4-й элемент? - PullRequest
3 голосов
/ 07 декабря 2009

Допустим, у меня 16 результатов

На каждый 4-й элемент мне нужно добавить класс «без полей» (потому что каждый элемент слева нуждается в поле справа, чтобы создать интервал, но последний, который делает это, нарушил бы макет, таким образом, необходимость этого).

Какой лучший способ сделать это?

У меня сейчас очень похоже на рельсы.

render :partial => @collection

_collection.html.haml
 stuff

Есть ли что-то, что я могу поместить в частичное, чтобы решить это, или это должно было произойти снаружи?

Спасибо.

Ответы [ 3 ]

9 голосов
/ 07 декабря 2009

Когда вы отображаете коллекцию, Rails создает скрытый индекс. В этом случае вы можете объединить модуль с индексом для получения результата.

# _partial.html.erb
<div class="<% if (partial_counter % 4) == 0 %>no-margin<% end %>">
  ...
</div>

# action
<%= render => "partial", :collection => @collection %>

Еще лучше, извлечь логику в метод Helper.

Примечание. Название счетчика: <partial_name>_counter.

2 голосов
/ 07 декабря 2009

Вы можете использовать цикл () для этого: http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M001753

Не уверен, будет ли это выглядеть иначе в haml, но в шаблоне erb я бы сделал это:

<% @collection.each do |item| %>
  <tr class="<%= cycle('yes-margin', 'yes-margin', 'yes-margin', 'no-margin' %>">
      ...
  </tr>
<% end %>
1 голос
/ 07 декабря 2009

Я был бы склонен использовать метод each_with_index из enumerable.

# app/views/questions/index.html.haml
- @questions.each_with_index do |question, index|
  %li{ :class => no_margin(index) }
    = render :partial => 'question', :object => question

Ваш помощник может выглядеть следующим образом.

# app/helpers/questions_helper.rb
def no_margin(index)
  index % 4 == 0 ? 'no-margin' : 'margin'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...