我想这有一个非常简单的答案对于阵列中的第一个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