Ruby on rails 如何将类添加到渲染:partial=>@每第四项收集?

Ruby on rails 如何将类添加到渲染:partial=>@每第四项收集?,ruby-on-rails,Ruby On Rails,假设我有16个结果 在每4个项目上,我需要添加一个类“无边距”(因为左侧的每个项目都需要右边距来创建间距,但最后一个项目这样做会破坏布局,因此需要这样做) 最好的方法是什么 我现在很喜欢它 render :partial => @collection _collection.html.haml stuff 我是否可以在部分中加入一些东西来解决这个问题,或者它必须在外部发生 谢谢。您可以使用cycle()来执行以下操作: 不确定它在haml中是否会有所不同,但在erb模板中,我会这样做

假设我有16个结果

在每4个项目上,我需要添加一个类“无边距”(因为左侧的每个项目都需要右边距来创建间距,但最后一个项目这样做会破坏布局,因此需要这样做)

最好的方法是什么

我现在很喜欢它

render :partial => @collection

_collection.html.haml
 stuff
我是否可以在部分中加入一些东西来解决这个问题,或者它必须在外部发生


谢谢。

您可以使用cycle()来执行以下操作:

不确定它在haml中是否会有所不同,但在erb模板中,我会这样做:

<% @collection.each do |item| %>
  <tr class="<%= cycle('yes-margin', 'yes-margin', 'yes-margin', 'no-margin' %>">
      ...
  </tr>
<% end %>

...

我倾向于使用
可枚举
中的
每个带有索引的方法

# 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

渲染集合时,Rails会创建隐藏索引。在这种情况下,您可以将模块与索引组合以获得结果

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

# action
<%= render => "partial", :collection => @collection %>
#_partial.html.erb
...
#行动
“部分”,:collection=>@collection%>
更好的是,将逻辑提取到助手方法中


注意。计数器的名称是
\u counter

问题是计数器从0开始…因此,尝试每4个项目添加一些内容实际上不起作用。它将其添加到第1、第5、第9等。