سؤال

لدي فئة "صور" صغيرة لطيفة تحتوي على الصور المرفقة. عندما أذهب إلى الصفحة لفرز ترتيب الصور، فإنه يتكرر على الرغم من كل صورة، وتعيين قيمة "الفرز" الجديدة، وتوفرها. كل شيء جيد حتى الآن.

المشكلة هي أنه لاحظت أن هذا السلوك بطيء إلى حد ما. اتضح أن Attialment_fu يعيد تحميل الصورة المصغرة في كل حفظ - بغض النظر عما إذا كانت هناك بيانات صورة جديدة للعمل معها أم لا.

من الواضح أن هذا النظام كان مدروسا جيدا، لذلك أنا مغادرت فقط لافتراض أن الحكم موجود لهذه الحالة. كيف أقول المرفق_FU لا يجدد الصور المصغرة عندما يكون مناسبا؟

شكرا، - matchu.

يحرر: تذكرت للتو ذلك، على هذا الوضع بالذات، يمكنني استخدام Update_Attribute لتفادي جميع الرسائل وغيرها من عمليات الاسترجاعات الأخرى. ومع ذلك، فإن هذا ليس حقا إجابة قابلة للحياة على السيناريو الكبير بالكامل. ماذا ينقصني؟

هل كانت مفيدة؟

المحلول

ذهب واخترق المرفق_fu قليلا، وإعادة كتابة save_attachment? سلوك. إلى حد كبير، أضفت بعض الشروط الجديدة: بالإضافة إلى ملف TEMP موجود، يجب أن يكون أحد الإجراءات التالية صحيحا:

  1. لا يوجد ملف للصورة موجود بالفعل (باستخدام full_filename ينسب).
  2. تم تحديث بيانات الصورة بشكل صريح باستخدام uploaded_data= طريقة.
  3. الصورة صورة مصغرة.

يمر جميع حالات الاختبار الثلاثة - تحميل الصور الجديدة وتحرير صور الصور وتحرير بيانات الصور غير المصنفة - لكنني لم أختبر ذلك حقا في البرية حتى الآن. ربما سأضطر إلى تقديم بعض الإصلاحات؛ سوف نرى ماذا سيحدث.

نصائح أخرى

الخيط الوحيد المفيد المعتدل الذي رأيته في هذا الموضوع هو هنا:

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

أعتقد أنه من المحتمل أن يكون حل Matchu هو الصحيح مع مراجعة سريعة لرمز Attachment_fu. أحب ذلك إذا كان يمكن أن تشترك المياه في التصحيح أو مقتطف من Save_attachment المعدلة؟ طريقة. أنا على وشك الحفر في هذا بمفردي، لأن هذا أصبح مشكلة بالنسبة لي وربما سيكون أقل عمل من استبدال الملحق_FU بالكامل ...

تحديث

مع مخطط Matchu's، توصلت إلى حل قصير (إذا كان غير مؤسدا) يبدو أنه يعمل بعد اختبار الضوء.

أنا وضعت save_attachment؟ في Attachment_fu / Attachment_fu.rb:

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

... للتحقق من الشروط التي وضعت matchu. لم أستطع التوصل إلى طريقة أنيقة لمعرفة ما إذا كانت البيانات قد تم تمريرها إلى حد ما إلى طريقة STALLED_DATA = SETTER (إذا كان لدى أي شخص طريقة أفضل للقيام بذلك، فأنا آذانا؛ ما زلت روبي / قضبان ) لذلك أضفت أيضا خطا للتحميل uploaded_data = لتعيين المتغير العالمي factive_upload:

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

نأمل أن يساعد، وإذا كان أي شخص لديه وسيلة أكثر أناقة للتعامل مع ما فعلته هناك مع المتغير العالمي، أحب أن أسمعها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top