PDA

Visualizza la versione completa : taggare più record


mlipreri
22-06-2009, 15:33
Ciao,
sto usando il plugin acts_as_taggable e devo taggare un set di records del qualce conosco gli id(passati dalla view).
In photos_controller ho


def tagging
@toTagArray = params[:ids].split(",") #array with all the record's id
@tag = params[:tag] #tag name
end

ho visto che c'è il metodo tag_list applicabile su uno specifico oggetto, esempio:


m = Model.first
m.tag_list = "tag1, tag2"
m.save

Nel mio caso qual'è il modo migliore per taggare una serie di records?
Sforzandomi mi è venuto in mente di fare così


def tagging
@toTagArray = params[:ids].split(",") #array with all the record's id
@tag = params[:tag] #tag name
@photos = Photo.find(:all, :conditions => {:id => @toTagArray })
@photos.each do |p|
p.tag_list = @tag
p.save
end
end

e magari fare una funzione nel modello che fa ciò al quale passare gli id (come mi è stato suggerito nei post precedenti).
Che ne pensate?
Grazie

toraz
22-06-2009, 19:45
def tagging
@toTagArray = params[:ids].split(",") #array with all the record's id
@tag = params[:tag] #tag name
@photos = Photo.find(:all, :conditions => {:id => @toTagArray })
@photos.each do |p|
p.tag_list = @tag
p.save
end
end


Non usare variabili di istanza quando non servono, all'interno del controller le variabili di istanza servono per passare dati alla view, se un dato non deve finire nella view non deve (dovrebbe?) essere messo in una variabile di istanza.

params[:tag] è una stringa tipo "bim, bum, bam"? Perché leggendo il nome singolare viene in mente di no, ma visto che usi tag_list verrebbe in mente di si. Usa sempre degli identificatori che rendano sempre il più chiaro possibile cosa identificano. Se oggi il dubbio è venuto a me, domani verrà anche a te!

Cos'ha che non va scrivere


Photo.find(array_di_id)

che usi sempre


Photo.find(:all, :conditions => { :id => array_di_id })

?



e magari fare una funzione nel modello che fa ciò al quale passare gli id

Io, personalmente, nel modello definirei solo un metodo così


def find_by_ids(string)
ids = string.split(",")
find(ids)
end

E il resto lo lascierei nel controller.

Loading