/ / Kaminari et paramètres supplémentaires - rubis sur rails, rubis, pagination, kaminari

Kaminari et paramètres supplémentaires - rubis sur rails, rubis, pagination, kaminari

Je "ai regardé autour de moi et je ne peux rien trouver de proche pour répondre à cela. Je pense que c’est un cas exceptionnel, alors je ne suis pas surpris.

J'ai une page d'index où je montre tous lesconduit, mais j'ai 3 façons différentes de le montrer: non révisé, révisé, tout. Pour ce faire, j'utilise la page current_page? helper, ajoutez:? unreviewed = true à l'URL.

Cela n'a pas posé de problème par lui-même, lorsque j'ai ajouté dans kaminari pour la pagination, les paramètres de la page semblent gâcher et rendre la page courante? ne peut pas lire les paramètres supplémentaires.

Comment puis-je résoudre ce problème ou existe-t-il un meilleur moyen d'atteindre cet objectif?

Ceci utilise Rails 4 et Kaminari 0.15.1

Manette:

def index
@leads = Lead.order(:id).page params[:page]
@reviewed_leads = Lead.where(reviewed: true).order(:id).page params[:page]
@unreviewed_leads = Lead.where(reviewed: nil).order(:id).page params[:page]
current_page_no = Lead.page
end

index.html.erb

         <tr>
<td colspan="7" style="text-align: center;">
<div class="pagination pagination-table">

<% if current_page?(controller: "leads", action: "index", unreviewed: "true") %>
<%= paginate @unreviewed_leads %>
<% elsif current_page?(controller: "leads", action: "index", reviewed: "true") %>
<%= paginate @reviewed_leads %>
<% else %>
<%= paginate @leads %>
<% end %>
</div>
</td>
</tr>

Cela a fonctionné quand l'URL ressemblait à:

/closingloop/leads?unreviewed=true

avec elle comme ça, le current_page n'est pas "en train de le lire correctement et il montre toujours la variable d'instance @leads

/closingloop/leads?page=2&unreviewed=true

toute aide serait grandement appréciée. Je vais continuer à essayer des choses. Je vais mettre à jour avec ce que je trouve.

Réponses:

3 pour la réponse № 1

Changez l’action de votre contrôleur en

def index
@leads = Lead.where(reviewed: params[:reviewed]).order(:id).page(params[:page])
end

Ensuite, à votre avis, vous n'avez pas à vérifier la page en cours, assurez-vous simplement que vous «transmettez la valeur de params[:reviewed]

<%= paginate @leads, params: { reviewed: params[:reviewed] } %>

METTRE À JOUR

Comme indiqué dans les commentaires, cela ne fonctionne pas pour montrer des pistes mixtes. Cela peut être réalisé en créant une portée

# lead model

def self.filter_by_reviewed_status(status)
case status
when nil     then scoped
when "true"  then where(reviewed: true)
when "false" then where(reviewed: false)
end
end

Ensuite, dans votre contrôleur, utilisez ceci pour obtenir les pistes

@leads = Lead
.filter_by_reviewed_status(params[:reviewed])
.order(:id)
.page(params[:page])

Assurez-vous de définir params[:reviewed] à soit vrai, faux ou nul (pas passer du tout) dans les liens pour obtenir le leads vous avez besoin