我有一部分我想放弃或不显示数组中的前三篇文章,因为它们位于精选文章部分。我也希望部分使用will_paginate w /无限滚动来加载下一页的文章。我面临的问题是,当使用@articles.drop(3).each do |a|
并且下一页加载时,该阵列将再次删除接下来的三篇文章。
解决此问题的最佳方法是什么?我最初的想法是一个数组中的数组,其中第一个数组删除前3个数组,然后嵌套数组返回所有文章,但我不知道该怎么做?
部分数组代码:
<% @articles.drop(3).each do |a| %>
<%= link_to a.source_url, :class => "flexRow" do %>
<%= a.source %>
<h3><%= a.title %></h3>
<% end %>
<% end %>
index.js.erb的
$('#article-index').append(' <%= j render("articles") %>');
<% if @articles .next_page %>
$('.pagination').replaceWith('<%= j will_paginate(@articles, :previous_label => '', :next_label => '', :page_links => false) %>');
<% else %>
$('.pagination').remove();
<% end %>
Index.html.erb
<div id="article-index">
<%= render 'articles' %>
</div>
UPDATE 这个解决方案似乎有效,但并不优雅?
<% (@articles.current_page == 1 ? @articles.drop(3) : @articles).each do |a| %>
答案 0 :(得分:1)
尝试
@articles[3..@articles.count]
这将删除在索引0,1和2处保留的记录,并返回剩余的记录。
答案 1 :(得分:0)
<击> 您可以在控制器中执行以下操作:
示例强>
@articles = Article.where(...).paginate(page: params[:page], per_page: 10)
# Works only for the first HTML request
unless request.xhr?
@articles.shift(3)
end
.
.
.
respond_to do |format|
format.html
format.js
end
现在,当您遍历@articles
时,它将从索引3开始,仅适用于第一次。
击>
修改强>
<% (request.xhr? ? @articles : @articles[3..10]).each do |a| %>
<%= link_to a.source_url, :class => "flexRow" do %>
<%= a.source %>
<h3><%= a.title %></h3>
<% end %>
<% end %>
假设页面大小为10。