我想這有一個非常簡單的答案對於陣列中的第一個x?
<% for user in @users %>
<li>
<%= link_to user.username, user %>
</li>
<% end %>
以我上面的簡單的例子,我將如何應用類我<li>
前三個實例回來了?其次,如何才能讓第二個項目和第一個項目有不同的課程?如1..2
我想這有一個非常簡單的答案對於陣列中的第一個x?
<% for user in @users %>
<li>
<%= link_to user.username, user %>
</li>
<% end %>
以我上面的簡單的例子,我將如何應用類我<li>
前三個實例回來了?其次,如何才能讓第二個項目和第一個項目有不同的課程?如1..2
要麼你可以手工計算(這是有點醜):
<% i = 0 %>
<% for user in @users %>
<li class=<%= (i < 3 ? "foo" : "bar") %>>
<%= link_to user.username, user %>
</li>
<% i = i.next %>
<% end %>
或使用each_with_index
<% @users.each_with_index do |user, i| %>
<li class=<%= (i < 3 ? "foo" : "bar") %>>
<%= link_to user.username, user %>
</li>
<% end %>
一旦你到更復雜的東西比i < 3
(如您的1..2問題)你應該考慮helper_method
(在helpers
)像class_by_position(pos)
,這樣你就可以寫
<li class=<%= class_by_position(i) %>>
第一個孩子假選擇器可能是一個更好的方法,但你需要一個計數器變量來跟蹤迭代以你的方式。
至於CSS,我同意,但這只是一個簡短的例子,實際上我會做的不僅僅是造型,所以我保持簡單。 – 2009-10-28 03:05:35
但是,反正有效的建議+1 – 2009-10-28 03:17:37
你的問題有點含糊。我不知道是否要在第一個x之後停止處理數組,或者不想。
如果你只是想在第一個x項目後停下來,或者只是尋找第二個和第三個項目,解決方案是使用一個切片。
例子:只是第3:
@user[0,3].each do |user|
... # only executed for user = @user[0],user = @user[1] and user = @user[3]
end
例子:就在第二和第三:
@user[1,2].each do |user|
... #only only executed for user = @user[1] and user = @user[3]
end
下面是使用這些新的概念和content_tag到更具體的回答你的問題以編程方式決定列表項目的類別。如果你經常這樣做,就成爲一個功能的好選擇。
<% first = true %>
<% @user[0,2].each do |user| %>
<% content_tag :li,
:class => first ? "class-for-first-item" : "class-for-2nd-&-3rd" do %>
<%= link_to user.username, user %>
<% end %>
<% first = false %>
<% end %>
<!-- Now to do the rest of them:-->
<% @user[3,-1].each do |user| %>
<% content_tag :li, :class => "class-for-rest" do %>
<%= link_to user.username, user %>
<% end %>
<% end %>
太棒了!這是一個非常有用的功能......讓我重新思考再次使用'for in' ......哈! – 2009-10-28 03:18:19