J’ai essayé de faire fonctionner acts_as_taggable_on_steroids et will_paginate, deux plugins Ruby on Rails ensemble.
acts_as_taggable_on_steroids permet comme son nom le laisse indiquer, un système de tags pour vos modèles et will_paginate permet la pagination de vos modèles. Seulement voilà, comment paginer un find_tagged_with ? Voici la solution.
Vous trouverez sur le site de Stoneage un tutoriel pour installer acts_as_taggable_on_steroids.
Pour l’installation de will_paginate, reportez vous sur le site de l’auteur du plugin : Errtheblog.
Voilà, maintenant que tout est en place, il va falloir modifier le fichier du plugin qui doit se trouver dans /vendor/acts_as_taggable_on_steroids/lib/acts_as_taggable.rb et ajouter ces deux fonctions dans le module SingletonMethods :
[ruby]
# Return the number of time this class has been tagged with this tag
def tagging_counts(tag)
count_by_sql(« select count(*) FROM tags, taggings WHERE » + sanitize_sql(['tags.name = ? AND tags.id = taggings.tag_id AND taggings.taggable_type = ?', tag, name]))
end
# paginate a call to find_tagged_with
# tag is the tag to find
# options is the option to use for pagination (:page, :per_page) and for find_tagged_with
def paginate_by_tag(tag, options = {})
options, page, per_page = wp_parse_options!(options)
offset = (page.to_i – 1) * per_page
options.merge!(:offset => offset, :limit => per_page.to_i)
items = find_tagged_with(tag, options)
count = tagging_counts(tag)
returning WillPaginate::Collection.new(page, per_page, count) do |p|
p.replace items
end
end
[/ruby]
Et voici comment l’utiliser dans votre controlleur :
[ruby]
def search_by_tag
params[:page] ||= 1
@produits = Produit.paginate_by_tag(params[:id], :page=>params[:page])
render :action=> »index »
end
[/ruby]
novembre 20th, 2007 at 10:44
Super !
2 super plugins liés pour nous faciliter la vie.
Merci soli.
décembre 19th, 2007 at 6:39
Il existe de nombreux plugins pour les tags… penses-tu que acts_as_taggable_on_steroids soit le meilleur?
décembre 20th, 2007 at 8:28
Je n’en ai pas testé beaucoup… deux seulement, mais celui ci m’a permis en moins de 5mn d’ajouter un système de tags et créer un nuage de tag. Donc je l’ai gardé de côté pour tous mes projets dont les tags sont demandés.
janvier 15th, 2008 at 4:50
Salut olivier,
Je reviens vers toi car j’ai décidé d’utiliser acts_as_taggable_on_steroids… d’autant que j’utilise will_paginate et que cela va être simple d’intégrer les deux, grâce à toi!
Dans mon appli, j’ai besoin de garder l’association entre un tag sur un objet (post, Produit…) et l’utilisateur qui a définit ce tag, sais-tu comment je pourrais faire cela? Les choses se compliquent encore plus!