【问题标题】:Rails will_paginate endless scroll with an array that drops the first 3 itemsRails will_paginate 使用删除前 3 个项目的数组进行无限滚动
【发布时间】:2017-07-24 15:05:16
【问题描述】:

我想删除或不显示数组中的前三篇文章的部分内容,因为它们位于精选文章部分。我还希望部分使用 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>

更新 这个解决方案似乎有效,但感觉不优雅?

<% (@articles.current_page == 1 ? @articles.drop(3) : @articles).each do |a| %>

【问题讨论】:

    标签: javascript ruby-on-rails arrays ruby-on-rails-4 will-paginate


    【解决方案1】:

    试试

    @articles[3..@articles.count]
    

    这将删除索引 0、1 和 2 处保存的记录,并返回剩余的记录。

    【讨论】:

    • 谢谢,但这会导致分页有些奇怪,并不是所有的文章都会出现​​。
    【解决方案2】:

    您可以在控制器中执行以下操作:

    示例

    @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。

    【讨论】:

    • 嗯,我在控制器中尝试 #<:activerecord_relation:0x007f9a3f30f9e0>` 时得到undefined method shift'。
    • 谢谢,但由于某种原因,这似乎错过了最后一页。
    • 对不起,这可能是由于条件错误(请求不是xhr时需要应用范围)。我交换了三元条件。立即检查。
    猜你喜欢
    • 2013-09-03
    • 2014-02-04
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多