Rails + Dragonfly Gem: حفظ الصورة في بنية الدليل على أساس سمات كائن ActivereCord

StackOverflow https://stackoverflow.com/questions/2705020

سؤال

أنا استخدم الجوهرة اليعسوب لإدارة الصور والمرفقات في تطبيق Rails الخاص بي وأحتاج إلى تخزين الصور في بنية دليل محددة استنادًا إلى نموذج المستخدم الخاص بي. دعنا نقول أن لدي نموذج مستخدم له اسم ويحتوي كل مستخدم على العديد من الألبومات ، التي لها اسم أيضًا ، ثم أريد تخزين الصور فيها "#{RAILS_ROOT}/public/system/#{user.name}/#{user.album.name}/#{suffix}"

لقد تمكنت من تغيير Root_path في Fly Dragon ، وقد تجاوزت REPANTING_STOROGE_PATH مثل هذا:

class MyDataStore < Dragonfly::DataStorage::FileDataStore
  private
   def relative_storage_path(suffix)
    "#{suffix}"
   end
end

لكن لا يزال ، لا أعرف كيف يمكنني تمرير سمات كائن ActivereCord مثل user.name و user.album.name إلى relative_storage_pathلإنشاء طريقي المثالي.

هل لديك أي فكرة كيف يمكنني القيام مثل هذا الشيء؟

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

المحلول

مارك إيفانز مؤلف جوهرة قدم لي معروفا وأجاب على هذا السؤال على مجموعة Google. إليكم إجابته التي نجحت بشكل جيد في حالتي:

أهلاً

لا يمكنك القيام بذلك خارج المربع ، لأن متجر البيانات مصمم عن قصد ليكون بسيطًا للغاية - فأنت تمر في البيانات ، فهو يعيدك إلى uid ، إلخ.

إذا كنت ترغب في القيام بذلك ، فسيتعين عليك مرفق القرد#حفظ! مثل ذلك:

class Dragonfly::ActiveRecordExtensions::Attachment
  def save!
    destroy! if uid_changed?
    self.uid = app.datastore.store(temp_object, parent_model) if has_data_to_store?
  end
end

الشيء الوحيد الذي قمت بتغييره أعلاه هو أن DataStore.store يأخذ اثنين من args الآن.

سيكون عليك بعد ذلك تعديل/Monkey-Patch-Patch Dragonfly :: DataStorage :: FileDatastore#Store لأخذ في الاعتبار ARG الثاني.

بدافع الاهتمام ، لماذا تريد تخزين الصور بهذا التنسيق؟

هتاف مارك

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