2010-10-28 11 views
9

Tengo algunos problemas tratando de encargo de las: opciones de URL para has_attached_file con un clip:: ruta ypersonalizada clip: ruta y url

tengo una clase polimórfico llamado "activos" que tienen:

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 

las interpolaciones funciona bien pero quiero encargo la ruta y la url en función de la file_owner_type

por ejemplo, si quiero senda imagen del usuario, me gustaría ir a tomar

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

Gracias por su ayuda

edición: creo que no me explico correctamente. Ya tengo las interpolaciones que se crean y funcionan bien.

Tengo un modelo de activo que es polimórfico, el propietario puede ser un usuario (para avatar), una prenda o un aderezo. Y quiero tener una ruta diferente dependiendo del propietario del archivo. En este momento, cuando quiero agregar un activo de prendas de vestir que funciona bien la imagen se pone en

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

pero si sólo quiero una imagen del usuario de este camino va a poner el avatar en

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

mientras que yo quiero ponerlo en

"/attachments/user_x/something_style.jpg".

gracias

+0

puede mostrar su código de interpolación aquí ... tal vez haya un problema allí – Rohit

Respuesta

10

Algo como esto en la url:

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

luego en las interpolaciones:

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 

en cuenta que es necesario establecer las _user, _dressing, _garmet, variables _category de tus modelos.

Espero que esto ayude.

+0

Thx pero ya tengo interpolaciones que funcionan bien. Tengo un modelo de activos que es polimórfico, el propietario puede ser un usuario (para avatar), una prenda o un vestidor. Y quiero tener una ruta diferente dependiendo del propietario del archivo. En este momento, cuando quiero agregar un activo de prenda, funciona bien, la imagen se coloca en "/attachments/user_x/dressing_y/garment_z/category_u/something_style.jpg", pero si solo quiero una imagen de usuario, esta ruta colocará el avatar en "/attachments/user_x/dressing_/garment_/category_/something_style.jpg" mientras que yo quiero ponerlo en "/attachments/user_x/something_style.jpg". – guts

+0

He cambiado mi respuesta según las aclaraciones en la pregunta. –

+0

Gracias, es exactamente lo que estaba buscando ^ – guts

0

Probar: attachment.instance.file_owner.class.downcase en su interpolación definida.