2012-05-17 3 views
0

У меня есть приложение для рельсов, в которое пользователи могут загружать фотографии. Фотографии загружаются в ковш Amazon S3. У меня есть «Contributor», у которого много «листингов», в «Листинг» много «изображений». То, что я хотел бы, чтобы загрузить все изображения этого типа каталога:Amazon s3- Paperclip не может загружать изображения на правильный путь

:contributor_id/:listing_id/IMAGES_HERE.jpg 

Я хотел бы также, как это так, что если участник создает еще один список, он не создает целую всю новую папку для этого вкладчик. Я хочу, чтобы он загружал его в уже созданную папку с идентификатором участника.

Любые мысли о том, как я могу это достичь? Вот что мой текущий: путь выглядит

has_attached_file :asset, 
       :styles => {:large => "640x480", :medium => "300x300", :thumb => "100x100" }, 
       :storage => :s3, 
       :s3_credentials => "#{Rails.root}/config/s3.yml", 
       :path => "/:contributor_id/:id/:filename" 

ОТВЕТ:

спасибо за ваши ответы. вот как я получил его на работу, используя функцию Interpolations в Paperclip.

Paperclip.interpolates('contributor_id') do |attachment, style| 
attachment.instance.listing.contributor_id 
end 

Paperclip.interpolates('listing_name') do |attachment, style| 
attachment.instance.listing.title.parameterize 
end 

А потом мой путь ..

:path => "/:contributor_id/:listing_name/:filename" 
+0

Вы правильно настроили s3.yml? – swati

+0

Да, этот файл настроен правильно. У меня нет проблем с загрузкой загрузок. Я просто ищу, как я могу настроить структуру каталогов загрузки, на которую они загружаются, и как не создавать дубликаты имен папок на основе идентификатора участника. – kcollignon

ответ

1

Я не уверен, но, как это обычно делают:

module Paperclip  
    module Interpolations 

    def timestamp attachment, style 
     attachment.instance_read(:updated_at).to_i 
    end 

    end 
end 

И я думаю, что это должно выглядеть:

module Paperclip  
    module Interpolations 

    def contributor_id attachment, style 
     attachment.instance_read(:contributor_id) 
    end 

    end 
end 

Вы можете узнать больше о Pape Пользовательские интерполяции rClip here

+0

Я думаю, что я должен иметь возможность редактировать учетные данные: путь для получения правильной структуры каталогов. Любая идея о том, как не дублировать имена папок, которые создаются? Если участник (: id => 2) загружает несколько фотографий, я не хочу иметь несколько папок с именем «2». Я бы хотел, чтобы изображения всегда загружались в их собственную папку каждый раз. – kcollignon

+0

Вы протестировали его? Если у вас есть путь, как в вашем примере _ /: contributor_id /: id /: filename_, у вас будет только одна папка для каждого идентификатора вкладчика (например, в вашей файловой системе). Итак, если вы загружаете несколько изображений в свою листинг (с id = 1), которая принадлежит некоторому вкладчику (id = 2), то вы получите дерево файлов следующим образом: _/2/1/image_1.jpg_, _/2 /1/image_2.jpg_, _/2/1/image_n.jpg_ ... Где _/2_ и _/2/1_ одинаковы для всех вложений. – ABrukish

+0

Обязательно используйте _: путь => "/:contributor_id/:id/:filename.:extension"_ для сохранения файлов в своих расширениях. – ABrukish