سؤال

أنا أركض في مشكلة مع مختلف المستخدمين الذين يقومون بتحميل الملفات بنفس الاسم الكتابة مع البرنامج المساعد Paperymorphic PaperClip. ما أود القيام به هو ضخ معرف المستخدم الحالي في عنوان URL / المسار. هل هذا ممكن؟ هل سأكون أفضل حالا لتوليد اسم عشوائي؟

فيما يلي حاليا الحالي: URL و: قيم المعلمة المسار في Asset.rb:

:url => "/assets/:id/:style/:basename.:extension",
:path => ":rails_root/public/assets/:id/:style/:basename.:extension"

ما أود أن أكون قادرا على فعله هو:

:url => "/assets/#{current_users_id}/:id/:style/:basename.:extension",
:path => ":rails_root/public/assets/#{current_users_id}/:id/:style/:basename.:extension"
هل كانت مفيدة؟

المحلول

استخدام الاستيفاءات الورقية:

ملف التكوين / المهيئين / paperclip.rb:

module Paperclip
  module Interpolations
    def user_id(attachment, style)
      current_user.id
    end
  end
end

خيار Has_ elefice_file:

:url => "/assets/:user_id/:id/:style/:filename"

(تم تغيير بناء الجملة من PaperClip 2.x إلى 2.3؛: المسار ليس ضروريا؛ استخدم أحدث إصدار وإلقاء نظرة على المصدر، وهي موثقة جيدا تماما.)

نصائح أخرى

في كل مرة أرى كلمة عشوائية ويتعتبط بالسلاسل، أعتقد أن GUID. ربما يمكنهم العمل من أجلك.

بالنسبة لي أنه لم يعمل byportclip.rb لكنه يعمل مثل هذا:

في فئة النموذج:

class Micropost < ApplicationRecord
  Paperclip.interpolates :user_id do |attachment, style|
    attachment.instance.user_id
  end

 has_attached_file  :pic1, 
    :url => "/Microposts/:user_id/:style/:basename.:extension"

في حالة حدوث ذلك إذا كنت ترغب في القيام بذلك بواسطة InterplipClip، يجب عليك العثور على مسار مثل هذا: أولا ابحث عن مسار ملف GEM. اكتب هذا في المحطة الخاصة بك:

$ gem env

بعد ذلك، سيوضح لك مسارا في "- مسارات الأحجار الكريمة:" في حالتي كان هذا المسار:

:/usr/local/lib/ruby/gems/2.4.0/gems/paperclip-5.0.0/lib/paperclip

في هذا الاتجاه، يمكنك العثور على "paperclip.rb".

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