2010-01-18 3 views
1

J'ai un flux XML que je suis en train d'extraire et d'analyser dans mon application Rails. J'ai commencé à l'implémenter comme bibliothèque dans lib/mais il me semblait plus logique de le traiter comme un modèle. Par commodité, je le traite comme un modèle ActiveRecord. Une exigence est qu'elle soit compatible avec le plugin will_paginate de mislav, bien que ce soit là où j'ai le problème.Comment stocker et paginer des données XML en tant que modèle Rails

J'ai créé une classe dans app/models/qui hérite de ActiveRecord :: Base et remplace simplement la méthode par défaut pour find. S'il y a un moyen plus facile, je suis tout ouïe. Mais cela fonctionne. Donc, avec ce travail, l'étape suivante consiste à essayer de paginer la collection. Pour cela j'essaye d'utiliser will_paginate de mislav puisque j'utilise ce plugin pour mes modèles typiques. Le problème est que will_paginate tente d'obtenir le nombre total de tâches. Il le fait en exécutant automatiquement un "SELECT count (*) AS count_all FROM jobs". Bien sûr, cela échoue puisqu'aucune telle table n'existe. Sans modifier le code de will_paginate, y a-t-il un moyen facile de corriger ce problème tout en permettant aux modèles standard d'utiliser will_paginate normalement?

Répondre

1

Vous pouvez facilement faire n'importe quelle collection paginable (?).

Array.class_eval do 
    def paginate(page = 1, per_page = 10) 
    WillPaginate::Collection.create(page, per_page, size) do |pager| 
     pager.replace self[pager.offset, pager.per_page].to_a 
    end 
    end 
end 

Ce code mappe le tableau dans la WillPaginate :: Collection - le paramètre taille est le nombre d'enregistrements, essentiellement.

Vous pouvez soit implémenter quelque chose de similaire dans votre modèle, soit ne pas utiliser ActiveRecord ... aucune raison valable, à moins que vous n'utilisiez des validations et d'autres choses en bas de la piste.

Questions connexes