10

Tengo un modelo de publicación al que estoy accediendo a través de ActiveAdmin. También se puede etiquetar usando la gema acts_as_taggable_on. Por lo tanto, el administrador puede agregar, editar o eliminar etiquetas de una publicación específica.Manipulación de etiquetas con acts_as_taggable_on y ActiveAdmin

La forma normal de añadir la funcionalidad de marcado para el recurso en su panel de administración es por hacer esto en 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 

Sin embargo, quiero tener las etiquetas seleccionadas a partir de una selección múltiple campo de formulario y no se ingresa manualmente en un campo de texto (como ocurre con el código anterior). Así que he intentado hacer esto:

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

pero no funciona como esperaba. Esto realmente crea nuevas etiquetas con algunos valores enteros para los nombres y los asigna a esa publicación. Alguien me dijo que se necesita código adicional para que esto funcione.

¿Alguna pista sobre cómo se hace esto? Aquí está mi modelo por las dudas: http://pastie.org/3911123

Gracias de antemano.

+0

Estoy tratando de hacer lo mismo, pero como actuables requiere una cadena separada por comas, no puedo obtener parámetros fuertes para aceptar la matriz que proporciona un menú desplegable de selección múltiple. ¿Como manejaste esto? – Philip7899

Respuesta

10

En lugar de

:collection => ActsAsTaggableOn::Tag.all 

tratar

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

Ajuste de la colección de Tag.all va a etiquetar sus mensajes con el ID de la etiqueta, ya que así es como etiquetas se identifican por defecto (que es donde el entero los valores para los nombres provienen de). map(&:name) le dice al generador de formularios que use el nombre de la etiqueta.

+4

'ActsAsTaggableOn :: Tag.pluck (: name)' sería aún mejor porque no cargará todas las etiquetas en la memoria antes de extraer el nombre. –

Cuestiones relacionadas