2010-10-28 1 views
9

Ho alcuni problemi cercando di consuetudine i: opzioni URL has_attached_file con graffetta:: percorso egraffetta personalizzato: percorso e: URL

Ho una classe polimorfica denominata "Asset" che hanno:

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 

le interpolazioni funziona bene ma voglio personalizzato il percorso e l'url a seconda del file_owner_type

per esempio, se voglio percorso immagine dell'utente, vorrei avere solo

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

Grazie per il vostro aiuto

modificare: penso non mi spiego correttamente. Ho già le interpolazioni che vengono create e funzionano bene.

Ho un modello di asset che è polimorfico, il proprietario può essere un utente (per è avatar), un indumento o una medicazione. E voglio avere un percorso diverso a seconda del proprietario del file. In questo momento, quando voglio aggiungere una risorsa indumento funziona bene l'immagine viene messa in

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

ma se voglio solo una foto utente questo percorso metterà l'avatar in

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

mentre io voglio metterlo in

"/attachments/user_x/something_style.jpg".

grazie

+0

puoi mostrare qui il tuo codice di interpolazione ... forse c'è un problema laggiù – Rohit

risposta

10

Qualcosa di simile nella url:

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

poi nelle interpolazioni:

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 

Si noti che è necessario impostare le _user, _dressing, _garmet, variabili _category dai tuoi modelli.

Spero che questo aiuti.

+0

Thx ma ho già interpolazioni che funzionano bene. Ho un modello di asset che è polimorfico, il proprietario può essere un utente (per è avatar), un indumento o una medicazione. E voglio avere un percorso diverso a seconda del proprietario del file. In questo momento, quando voglio aggiungere una risorsa indumento funziona bene l'immagine è inserita in "/attachments/user_x/dressing_y/garment_z/category_u/something_style.jpg" ma se voglio solo un'immagine utente questo percorso metterà avatar in "/attachments/user_x/dressing_/garment_/category_/something_style.jpg" mentre io voglio metterlo in "/attachments/user_x/something_style.jpg". – guts

+0

Ho cambiato la mia risposta in base ai chiarimenti nella domanda. –

+0

Grazie, è esattamente quello che stavo cercando ^ – guts

0

Prova: attachment.instance.file_owner.class.downcase nell'interpolazione definita.