我在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 ...
答案 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 %>
希望这有帮助:)