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 № 1Changez 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