假设我有16个结果
在每4个项目上我需要添加一个类“无边距”(因为左边的每个项目需要一个边距来创建间距,但最后一个这样做会破坏布局,因此需要这个)。
最好的方法是什么?
我现在非常喜欢它。
render :partial => @collection
_collection.html.haml
stuff
有什么东西可以放在部分中来解决这个问题,还是必须在外面发生?
感谢。
答案 0 :(得分:9)
渲染集合时,Rails会创建隐藏索引。在这种情况下,您可以将模块与索引组合以获得结果。
# _partial.html.erb
<div class="<% if (partial_counter % 4) == 0 %>no-margin<% end %>">
...
</div>
# action
<%= render => "partial", :collection => @collection %>
更好的是,将逻辑提取到Helper方法中。
请注意。该计数器的名称为<partial_name>_counter
。
答案 1 :(得分:2)
您可以使用cycle()执行此操作: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 %>
答案 2 :(得分:1)
我倾向于使用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