Генерация уникального пути к файлу с помощью Polymorphic Paperclip - PullRequest
3 голосов
/ 18 июля 2009

Я сталкиваюсь с проблемой, когда разные пользователи загружают файлы с тем же именем, которые перезаписываются с помощью плагина Polymorphic Paperclip. То, что я хотел бы сделать, это вставить идентификатор текущего пользователя в URL / путь. Это возможно? Будет ли мне лучше создать случайное имя?

Вот мои текущие значения параметров: url и: path в 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"

Ответы [ 3 ]

6 голосов
/ 12 августа 2009

Использовать интерполяции скрепок:

файл config / initializers / paperclip.rb:

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

has_ ​​attach_file option:

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

(Синтаксис изменен с Paperclip 2.x на 2.3;: путь не требуется; используйте последнюю версию и посмотрите на источник, он достаточно хорошо задокументирован.)

0 голосов
/ 21 мая 2017

для меня это не сработало bypaperclip.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"

Если вы хотите сделать это с помощью интерполяции Paperclip, вы должны найти путь, подобный следующему: сначала найдите путь к файлу. введите это в своем терминале:

$ gem env

Затем он покажет вам путь в "- ПУТИ ДЖЕМ:" в моем случае это был путь:

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

В этом направлении вы можете найти «paperclip.rb».

0 голосов
/ 18 июля 2009

Каждый раз, когда я вижу слово random и оно относится к строкам, я думаю GUID. Возможно, они могли бы работать на вас.

...