2009-12-20 5 views
1

J'utilise acts_ as_ taggable_on dans mon application et je l'ai toujours parfaitement adapté, mais je cherche des informations sur la façon de faire une modification.Etiquettes ajoutées à acts_as_taggable_on

À l'heure actuelle si j'entre une étiquette qui comprend des espaces, la balise est enregistrée avec ces espaces et ainsi voir tous les enregistrements avec ce tag j'ai quelque chose comme:

http://myapp.local/tag/this%20tag%20has%20spaces

Comment puis-je couper les mots balises quand ils sont sauvés pour la première fois par acts_ as_ taggable_on afin que le tag soit stocké comme this-tag-has-spaces?

Je peux substituer les valeurs comme suit, mais comment dois-je faire ceci avant que acts_ as_ taggable_on prenne la relève et enregistre la liste de variables?

tag.downcase.gsub(/[^[:alnum:]]/,'-').gsub(/-{2,}/,'-')

Merci

Simon

Répondre

5

En tirant parti du fait que acts_as_taggable_on_steroids expose un accesseur tag_list qui peut être écrit, voici ce que je l'ai fait sur un de mes modèles. Je suppose que vous pourriez faire quelque chose de similaire:

class MyTaggableObject < ActiveRecord::Base 
    acts_as_taggable 

    before_validation :clean_up_tags 

    # Clean up tag formatting 
    def clean_up_tags 
    # Make lowercase 
    self.tag_list.map!(&:downcase) 

    # Replace any non-word ([^\w]) characters with a hyphen 
    self.tag_list.map! {|tag| tag.gsub(/[^\w]+/i,'-')} 
    end 
end 
+0

Parfait - merci !! – simonyoung

1

Vous pouvez ajouter la ligne suivante:

ActsAsTaggableOn.force_parameterize = true 

à un initialiseur.

+0

c'est la façon nouvelle et plus facile de le faire. –

Questions connexes