Rails将使用一个放下前三项

时间:2017-07-24 15:05:16

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

我有一部分我想放弃或不显示数组中的前三篇文章,因为它们位于精选文章部分。我也希望部分使用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| %>

2 个答案:

答案 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。