/ / Aggiunta di tag alle immagini in RefineryCMS - ruby-on-rails, ruby, ruby-on-rails-3, refinerycms

Aggiunta di tag alle immagini in RefineryCMS - ruby-on-rails, ruby, ruby-on-rails-3, refinerycms

Sto provando ad aggiungere tag al modello Image inRefineryCMS (provando su 1.0.8 e 2.0.4), ha aggiunto attr_accessible: tag_list, richiesto agisce come taggabile e imposta le viste, ma il problema è che i tag salvano solo quando si modifica / aggiorna un'immagine caricata in precedenza - non quando caricamento per la prima volta, anche se utilizza lo stesso modulo ...

Qualche idea?

Succede su ogni versione di binari e raffineria che ho provato ...

I tag vengono visualizzati nel post quando si esaminano i log, ma non si salva ...

risposte:

1 per risposta № 1

Ho avuto un problema simile e alla fine trovo la causa degli attributi extra (nel tuo caso: tag_list) non salvati sul nuovo caricamento dell'immagine.

Se guardi ::Refinery::ImageController vedrai che l'azione di creazione crea acutamente l'immagine 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] è un array quando è abilitato l'uplo di più file multipli (per impostazione predefinita lo è). Ma poi l'azione usa solo i valori dell'array durante la creazione delle immagini, ignorando gli altri parametri.

Scrivo rapidamente la soluzione che segue che consente di salvare gli altri parametri sul caricamento di più immagini:

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

fine

Probabilmente non è la soluzione più elegante ma fa il trucco.

Per usarlo nella tua app, dovrai creare un decoratore per ::Refinery::ImageController per copiare e modificare l'azione di creazione in esso. (vedi "Estensione di un controller" in Guide della raffineria)