1

J'ai un partiel où je voudrais laisser tomber ou ne pas afficher les trois premiers articles dans le tableau, car ils sont dans une section d'articles en vedette. Je veux aussi que le partial utilise will_paginate w/scrolling sans fin pour charger la prochaine page d'articles. Le problème auquel je suis confronté est que lorsque vous utilisez @articles.drop(3).each do |a| et que la page suivante est chargée, le tableau supprime à nouveau les trois articles suivants.Rails will_paginate scroll infini avec un tableau qui supprime les 3 premiers articles

Quelle est la meilleure façon de résoudre ce problème? Ma pensée initiale était un tableau dans un tableau, où le premier tableau supprime le premier 3 alors le tableau imbriqué retourne tous les articles, mais je ne suis pas sûr de savoir comment faire cela?

code Array partiel:

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

MISE À JOUR Cette solution semble fonctionner mais n » t se sentir élégant?

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

Répondre

1

Essayez

@articles[[email protected]] 

Cela baissera les documents conservés à l'index 0, 1 et 2, et retourner le reste.

+0

Merci, mais cela provoque une funkiness avec la pagination, tous les articles apparaissent. –

0

Vous pouvez le faire ce qui suit dans votre contrôleur:

EXEMPLE

@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 

Maintenant, quand vous itérer sur @articles, il partirait de l'index 3, seulement pour la première fois.

EDIT

<% (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 %> 

En supposant que la taille de la page est 10.

+0

Hmm, j'obtiens la 'méthode non définie 'shift' pour #

' en essayant cela dans le contrôleur. –

+0

@ArashHadipanah Vous avez raison !!! C'est parce que ce n'est pas un tableau. – Abhi

+0

Essayez la réponse éditée – Abhi