2012-08-19 47 views
1

有沒有更好的方式來做到這一點:如何通過3個值週期在Rails視圖

row_bg_color_group = row_bg_color_group == 1 ? 2 : row_bg_color_group == 2 ? 3 : 1 

理想像

row_bg_color_group = (1,2,3).cycle 

,並通過大循環中的下一個值將每次使用。

請注意,這是作爲不同羣組大小的一部分有條件地執行的,例如,

1111 
1111 
1111 
2222 
3333 
3333 
3333 
333 

不僅僅是

111 
222 
333 
111 
222 
333 
111 
222 
333 

回答

2

Rails中有一個cycle()docs)。所以,你可以這樣做:

row_bg_color_group = cycle(1,2,3) 

如果你需要有一個以上的週期,你可以給他們的名字:

row_bg_color_group = cycle(1,2,3, :name => "row_bg_color_group") 

,然後他們不會衝突。

4

您可以使用模運算符:

row_bg_color_group = ((row_bg_color_group + 1) % 3) + 1 

我不知道你的情況,但是這看起來乾淨了一點,如果你可以用數目組0到2而不是1到3.

row_bg_color_group = (row_bg_color_group + 1) % 3 
+0

一個有用的答案(+ 1),但我發現循環方法更具可讀性。 – 2012-08-20 12:38:16

2
<% outer_loop_control do %> 
    <% row_bg_color_group = cycle(1,2,3) 
    <% inner_loop_control do %> 
    ... # all uses of row_bg_color_group in the inner loop will be the same 
    <% end %> 
<% end %>