acts_as_taggable_on_steroids et will_paginate

Ruby Add comments

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]

4 Responses to “acts_as_taggable_on_steroids et will_paginate”

  1. hoksitan Says:

    Super !
    2 super plugins liés pour nous faciliter la vie.
    Merci soli.

  2. Julien Says:

    Il existe de nombreux plugins pour les tags… penses-tu que acts_as_taggable_on_steroids soit le meilleur?

  3. Olivier BONNAURE Says:

    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.

  4. Julien Says:

    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!

Leave a Reply

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Connexion