10

Ho un modello di post che sto accedendo tramite ActiveAdmin. È anche taggable usando la gemma act_as_taggable_on. Quindi l'amministratore può aggiungere, modificare o eliminare tag da un post specifico.Manipolazione di tag con act_as_taggable_on e ActiveAdmin

Il modo normale per aggiungere la funzionalità di tagging per la risorsa nel pannello di amministrazione è di fare questo in admin/posts.rb:

ActiveAdmin.register Post do 
    form do |f| 
    f.inputs "Details", :multipart => true do 
     f.input :tag_list 
     # and the other irrelevant fields goes here 
    end 

    f.buttons 
    end 
end 

Tuttavia, voglio avere le etichette selezionate da una selezione multipla campo modulo e non viene inserito manualmente in un campo di testo (come con il codice sopra). Così ho provato a fare questo:

 f.input :tag_list, :as => :select, 
         :multiple => :true, 
         :collection => ActsAsTaggableOn::Tag.all 

ma non funziona come previsto. Questo in realtà crea nuovi tag con alcuni valori interi per i nomi e li assegna a quel Post. Qualcuno mi ha detto che è necessario un codice extra perché funzioni.

Eventuali indizi su come è fatto? Ecco il mio modello per ogni evenienza: http://pastie.org/3911123

Grazie in anticipo.

+0

Sto cercando di fare la stessa cosa, ma poiché actastaggable on richiede una stringa separata da virgole, non posso ottenere parametri forti per accettare l'array che dà un dropdown multi-select. Come hai gestito questo? – Philip7899

risposta

10

Invece di

:collection => ActsAsTaggableOn::Tag.all 

provare

:collection => ActsAsTaggableOn::Tag.pluck(:name) 

Impostare la collezione di Tag.all sta per contrassegnare i tuoi messaggi con ID del tag, dal momento che è così che i tag sono identificati da default (che è dove il numero intero i valori per i nomi provengono da). map(&:name) indica al generatore di moduli di utilizzare invece il nome del tag.

+4

'ActsAsTaggableOn :: Tag.pluck (: name)' sarebbe ancora meglio perché non caricherà tutti i tag in memoria prima di estrarre il nome. –

Problemi correlati