1

我有一个部分,我想删除或不显示数组中的前三篇文章,因为它们在精选文章部分。我也希望部分使用will_paginate w /无限滚动来加载下一页文章。我面临的问题是,当使用@articles.drop(3).each do |a|并下一页加载时,该阵列会再次丢弃接下来的三篇文章。Rails will_paginate无限滚动与丢弃前3项的数组

解决这个问题的最佳方法是什么?我最初的想法是一个数组内的数组,第一个数组放下第一个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| %> 

回答

1

尝试

@articles[[email protected]] 

这将下降,在指数0,1和2日举行的记录,并归还剩余。

+0

感谢但这会导致一些funkiness与分页,不是所有的文章出现。 –

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

+0

嗯,当在控制器中尝试时,我得到#

的'未定义方法'shift'。 –

+0

@ArashHadipanah你是对的!这是因为它不是一个数组。 – Abhi

+0

试试编辑答案 – Abhi