attachment_fu: Ne pas recharger les vignettes
-
06-09-2019 - |
Question
J'ai une jolie petite classe « photos » qui a joint les images. Quand je vais à la page pour trier l'ordre de photos, il itère que chaque photo, définit la nouvelle valeur « de tri », et l'enregistre. Tout bien jusqu'à présent.
Le problème est, je l'ai remarqué ce comportement est assez lent. Il s'avère, la vignette attachment_fu recharge à chaque enregistrement -. Peu importe si oui ou non il y a de nouvelles données d'image pour travailler avec
Il est évident que ce système a été bien pensé, donc je ne reste à supposer qu'une disposition existe pour cette situation. Comment puis-je dire attachment_fu ne pas régénérer les vignettes quand il est pas approprié?
Merci, - Matchu
Modifier Je viens de me rappeler que, pour cette situation particulière, je peux utiliser update_attribute pour esquiver tous les autres validations et callbacks. Cependant, ce n'est pas vraiment une réponse viable à l'ensemble grand scénario. Qu'est-ce que je manque?
La solution
entra et piraté attachment_fu un peu, et réécrit le comportement de save_attachment?
. À peu près, j'ai ajouté quelques nouvelles conditions: en plus d'un fichier temporaire existant, l'une des conditions suivantes doivent être:
- Aucun fichier pour l'image existe déjà (en utilisant l'attribut
full_filename
). - Les données d'image a été explicitement mis à jour en utilisant la méthode
uploaded_data=
. - L'image est une miniature.
Il passe tous les trois cas de test - nouveaux ajouts photo, modifier des images photo et l'édition des données de photos sans image - mais je n'ai pas vraiment testé dans la nature pour l'instant. Je vais probablement faire quelques corrections; nous verrons ce qui se passe.
Autres conseils
Le fil moyennement utile, je l'ai vu sur ce sujet est ici:
http://groups.google.com/group/rubyonrails -Parlez / browse_thread / fil / 709d97e06b373786
Je pense que la solution de Matchu est probablement la bonne avec un examen rapide du code attachment_fu. J'aimerais si Matchu pourrait partager un patch ou un extrait de son save_attachment modifié? méthode. Je suis sur le point de creuser dans ce moi-même, puisque cela est devenu un problème pour moi et ce sera probablement moins de travail que le remplacement attachment_fu entièrement ...
Mise à jour
Avec le contour de Matchu, je suis venu avec un court (si inélégant) solution qui semble fonctionner après le test de la lumière.
Je modifed save_attachment? dans attachment_fu / attachment_fu.rb:
def save_attachment?
return false unless (thumbnail || !full_filename || @active_upload) #added
File.file?(temp_path.to_s)
end
... pour vérifier les conditions Matchu Disposées. Je ne pouvais pas trouver une façon élégante de dire si les données avaient été transmises directement à la méthode de uploaded_data = setter (si quelqu'un a une meilleure façon de faire, je suis toutes les oreilles, je suis toujours un rubis / rails Noob ) donc j'ai aussi ajouté une ligne à uploaded_data = pour définir la @active_upload variable 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
Hope qui aide, et si quelqu'un a une façon plus élégante de gérer ce que je faisais là-bas avec la variable globale, j'aimerais l'entendre.