如何访问ruby数组中的第n个元素?具体来说,是一个will_paginate集合

时间:2011-10-01 00:13:29

标签: ruby-on-rails arrays ruby-on-rails-3 loops pagination

我在rails上使用ruby,并且会将帖子输出到这样的页面:

 <div class="posts">
        <% render @posts %>
 </div>

假设我要更改此页面,以便在不同的div中呈现一些帖子:                         &lt;%render'发布/发布',:post =&gt; #集合中的第一个元素%&gt;      

 <div class="second_post">
        <% render 'posts/post', :post => #the second element in the collection %>
 </div>
 </div>

 <div class ="lower_container">
 <div class="posts">
        #may have to run a loop for this last one, to render all the rest of posts. How?
        <% render 'posts/post', :post => #all other posts %>
 </div>
 </div>

具体来说,我知道我可以使用@ post.first作为第一个元素,但不知道第二个(或第三个或第四个元素)。当然,我的编程背景让我想要@post(n),其中n是我想要访问的元素的索引。这在ruby中不起作用。

仅供参考:邮件收集在控制器中通过以下方式创建:

  @posts = Post.paginate(:page => params[:page])

有谁知道我最好如何实现这一目标?我知道它可能看起来非常规,但对于我真正想要的html / UI方面有这样的div ...

2 个答案:

答案 0 :(得分:0)

在你的部分内你可以打电话:

<%= posts_counter %>

<partial_name>_counter

答案 1 :(得分:0)

你可以使用CSS3的n-child选择器来定位特定的div。例如,如果您的代码如下所示:

<div id="posts">
<% @posts.each do |post| %>
  <div>
    <%= post.content %>
  </div>
<% end %>
</div>

然后你可以像这样定位第一个和第二个<div>

div#posts div:nth-child(1) { }
div#posts div:nth-child(2) { }

jQuery也可以以相同的方式选择它们,并在需要时将类添加到它们中:

$('div#posts div:nth-child(1)').addClass('firstPost');

<强>更新

好的,在您的回复之后,我建议在迭代您的集合时使用each_with_index帮助方法,如下所示:

<% @posts.each_with_index do |post, index| %>
  <% if index == 0 %>
    <div class="specialFirstIndexClass">
      <%= post.content %>
    </div>
  <% end %>
  <% if index == 1 %>
    <div class="specialSecondIndexClass">
      <%= post.content %>
    </div>
  <% end %>
<% end %>

或者你可以像这样使用Ruby开关,因为它们很漂亮:

<% @posts.each_with_index do |post, index| %>
  <% case index %>
  <% when 0 %>
    <div class="specialFirstIndexClass">
      <%= post.content %>
    </div>
  <% when 1 %>
    #etc..
  <% else %>
    <div class="notSoSpecial"><%= post.content %></div>
  <% end %>
<% end %>

希望这有帮助:)