2017-02-12 1 views
1

J'ai installé gem Kaminari et ont le code suivant dans mon contrôleur:API Rails 5 utilisant Kaminari - comment fournir les données de comptage de pages au client?

# GET /customers 
    def index 
    if params[:page] 
     @customers = Customer.page(params[:page]).per(params[:per_page]) 
     pageCount = (Customer.count/params[:per_page].to_f).ceil  
    else 
     @customers = Customer.order('updated_at DESC') 
     pageCount = 1 
    end 
    render json: @customers, meta: { total: pageCount, records: Customer.count } 
    end 

Cette tente d'ajouter une section « méta » pour ma réponse avec les données dont j'ai besoin dans le client pour construire les commandes de pagination.

Le problème est que si je fais une demande (par exemple en utilisant Postman):

localhost: 3000/clients page = 1

Les données méta n'est pas ajouté à la réponse. FYI J'ai basé ce code off que j'ai utilisé dans EmberJS en utilisant JSONAPI, mais maintenant j'utilise Angular2, donc je ne sais pas comment obtenir ces données 'méta' ajoutées à la réponse.

Répondre

2

Vous devriez écrire comme

render json: { customers: @customers, meta: { total: pageCount, records: Customer.count } } 

Dans votre exemple, vous ajoutant juste @customers à la réponse JSON, alors qu'une partie méta va ailleurs (pas de réponse). Donc, pour avoir votre section meta dans votre réponse json, assurez-vous qu'il est à la bonne place

+0

Merci pour une réponse si rapide, fonctionne parfaitement ... si simple quand vous savez comment, lol :) – rmcsharry

+3

variable 'pageCount' et le calcul est inutile, remplacez par @ customers.total_pages. La méthode '.total_pages' est [fournie par kaminari] (https://github.com/kaminari/kaminari#query-basics) – Thomas