/ / Agregar etiquetas a las imágenes en RefineryCMS - ruby-on-rails, ruby, ruby-on-rails-3, refinerycms

Agregar etiquetas a las imágenes en RefineryCMS - ruby-on-rails, ruby, ruby-on-rails-3, refinerycms

Estoy tratando de agregar etiquetas al modelo de imagen enRefineryCMS (probando en 1.0.8 y 2.0.4), ha agregado attr_accessible: tag_list, requiere actos como taggable y configura las vistas, pero el problema es que las etiquetas solo se guardan al editar / actualizar una imagen cargada previamente, no cuando Subiendo por primera vez, aunque usa la misma forma ...

¿Algunas ideas?

Sucede en todas las versiones de rieles y refinería que he probado ...

Las etiquetas pasan por la publicación al mirar los registros, pero no se guardan ...

Respuestas

1 para la respuesta № 1

Tuve un problema similar y, finalmente, encontré la causa de que los atributos adicionales (en su caso, la lista de etiquetas) no se guardaron en la carga de una nueva imagen.

Si miras ::Refinery::ImageController Verás que la acción de crear crea la imagen de forma activa con:

unless params[:image].present? and params[:image][:image].is_a?(Array)
@images << (@image = ::Refinery::Image.create(params[:image]))
else
params[:image][:image].each do |image|
@images << (@image = ::Refinery::Image.create(:image => image))
end
end

params[:image][:image] es una matriz cuando se habilitan varios archivos múltiples uploed (de forma predeterminada, está habilitado). Pero entonces la acción solo usa los valores de matriz al crear las imágenes, ignorando los otros parámetros.

Rápidamente escribo la siguiente solución que permite guardar los otros parámetros en la carga de varias imágenes:

unless params[:image].present? and params[:image][:image].is_a?(Array)
@images << (@image = ::Refinery::Image.create(params[:image]))
else
images_params = params[:image].dup
images_params.delete(:image)
params[:image][:image].each do |image|
@images << (@image = ::Refinery::Image.create({:image => image}.merge(images_params)))
end

fin

Probablemente no sea la solución más elegante, pero hace el truco.

Para usarlo en tu aplicación, tendrás que crear un decorador para el ::Refinery::ImageController para copiar y editar la acción crear en ella. (ver "Extender un controlador" en Guias de refineria)