Domanda

ho un bel po 'di "foto" di classe che ha allegato le immagini. Quando vado alla pagina per ordinare ordine le foto, si itera anche se ogni foto, definisce il nuovo 'sort' valore, e lo salva. Tutto bene finora.

Il problema è che, ho notato questo comportamento è piuttosto lento. Risulta, attachment_fu ricarica la miniatura su ogni salvare -. Indipendentemente dal fatto che non c'è nuovi dati di immagine a lavorare con

Ovviamente questo sistema è stato ben pensato-out, quindi ho lasciato solo supporre che esiste una disposizione per questa situazione. Come faccio a dire attachment_fu di non rigenerare le miniature quando non è appropriato?

Grazie, - Matchu

Modifica ho appena ricordato che, per questa particolare situazione, posso usare update_attribute per schivare tutte le convalide e gli altri callback. Tuttavia, questo non è davvero una risposta valida a tutto il grande scenario. Che cosa mi manca?

È stato utile?

Soluzione

È andato in e fatto attachment_fu un po ', e ha riscritto il comportamento save_attachment?. Praticamente, ho aggiunto alcune nuove condizioni: in aggiunta a un file temporaneo esistente, in uno dei seguenti deve essere vera:

  1. Nessun file per l'immagine già esistente (utilizzando l'attributo full_filename).
  2. I dati di immagine è stato esplicitamente aggiornati utilizzando il metodo uploaded_data=.
  3. L'immagine è una miniatura.

Si passa tutti e tre i casi di test - nuovi caricamenti di foto, modificare le immagini fotografiche e l'editing non-immagine dei dati di foto - ma non ho davvero solo ancora testato questo fuori in natura. Io probabilmente devo fare alcune correzioni; vedremo cosa succede.

Altri suggerimenti

Il filo solo moderatamente utile che ho visto su questo argomento è qui:

http://groups.google.com/group/rubyonrails talk / browse_thread / thread / 709d97e06b373786

Credo che la soluzione di Matchu è probabilmente quella corretta con una rapida rassegna del codice attachment_fu. Mi piacerebbe se Matchu potesse condividere una patch o un frammento della sua save_attachment modificato? metodo. Sto per scavare in questo da solo, dal momento che questo è diventato un problema per me e probabilmente sarà meno lavoro di sostituire interamente attachment_fu ...

Aggiorna

Con contorno di Matchu, mi si avvicinò con una soluzione a breve (se poco elegante) che sembra funzionare dopo il test della luce.

I modifed save_attachment? in attachment_fu / attachment_fu.rb:

def save_attachment?
  return false unless (thumbnail || !full_filename || @active_upload) #added
  File.file?(temp_path.to_s)
end

... per verificare le condizioni Matchu disposti. Non riuscivo a trovare un modo elegante per dire se i dati erano stati passati insieme al uploaded_data = metodo setter (se qualcuno ha un modo migliore per fare questo, io sono tutto orecchi, io sono ancora un rubino / rotaie niubbo ), così ho anche aggiunto una linea a uploaded_data = per impostare la @active_upload variabile globale:

def uploaded_data=(file_data)
  return nil if file_data.nil? || file_data.size == 0
  self.content_type = file_data.content_type
  self.filename     = file_data.original_filename if respond_to?(:filename)
  @active_upload=true # added
  if file_data.is_a?(StringIO)
    file_data.rewind
    self.temp_data = file_data.read
  else
    self.temp_path = file_data
  end
end

Speranza che aiuta, e se qualcuno ha un modo più elegante per gestire quello che ho fatto lì con la variabile globale, mi piacerebbe sentirla.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top