скрепка обычай: путь и: URL - PullRequest
       15

скрепка обычай: путь и: URL

9 голосов
/ 28 октября 2010

У меня есть некоторые проблемы при попытке настроить параметры: path и: url для has_attached_file с помощью paperclip:

У меня есть полиморфный класс с именем "Актив", который имеет:

class Asset < ActiveRecord::Base

  belongs_to :file_owner, :polymorphic => true

  has_attached_file :picture, :styles => { ...},
             :url => "/attachments/user_:user/dressing_:dressing/garment_:garment/category_:category/:basename_:style.:extension",  
             :path => ":rails_root/public/attachments/user_:user/dressing_:dressing/garment_:garment/category_:category/:basename_:style.:extension"  
end

Интерполяция работает хорошо, но я хочу настроить путь и URL в зависимости от file_owner_type

например, если я хочу путь к изображению пользователя, я хотел бы просто иметь

:path => ":rails_root/public/attachments/user_:user/:basename_:style.:extension

Спасибо за вашу помощь

изменить : Я думаю, что я не объяснил себя правильно. У меня уже есть интерполяции, которые созданы и хорошо работают.

У меня есть модель активов, которая является полиморфной, владелец может быть пользователем (для аватара), одеждой или одеждой. И я хочу иметь другой путь в зависимости от владельца файла. В настоящее время, когда я хочу добавить предмет одежды, он работает хорошо, картинка помещается в

"/attachments/user_x/dressing_y/garment_z/category_u/something_style.jpg"

но если я просто хочу изображение пользователя, этот путь поместит аватар в

"/attachments/user_x/dressing_/garment_/category_/something_style.jpg"

тогда как я хочу поместить его в

"/attachments/user_x/something_style.jpg".

спасибо

Ответы [ 2 ]

11 голосов
/ 28 октября 2010

Примерно так в URL:

:url => "/attachments/:path/:basename_:style.:extension",  

затем в интерполяции:

Paperclip.interpolates :path do |attachment, style|
  if attachment.instance.file_owner_type == User.class.name
    # first set the _user variable (something like self.owner.id.to_s) 
    return "user_" + _user
  else
    # first set the _user, _dressing, _garmet, _category variables from your models
    return "user_#{_user}/dressing_#{_dressing}/garment_#{_garmet}/category_#{_category}/"
  end
end

Обратите внимание, что вам нужно установить переменные _user, _dressing, _garmet, _category из ваших моделей.

Надеюсь, это поможет.

0 голосов
/ 28 октября 2010

Попробуйте: attachment.instance.file_owner.class.downcase в определенной вами интерполяции.

...