Se si rimane nello standard funziona, purtroppo io non riesco mai a far
parte dello standard ed ho questo grattacapo:
ho un modello lettera che può avere molti allegati. Il modello allegato
e formato da qualche campo più il file gestito con paperclip.
I file li salvo con un url e path personalizzato:
has_attached_file :file,
:url =>
"#{PREFIX}/assets/:letter_id_:id_:attachment_:basename.:extension",
:path =>
":rails_root/public/assets/:letter_id_:id_:attachment_:basename.:extension"
ora la parte poco standard: per valorizzare quel :letter_id devo
aggiungere il token nell'interpolazione:
Paperclip::Attachment.interpolations[:letter_id] = proc do |attachment,
style|
attachment.instance.letter.id
end
Ha sempre funzionato perchè gli allegati si aggiungevano dopo la
creazione della lettera.
Ora che sto implementando un'altra creazione (massiva) mi viene molto
comodo utilizzare i modelli nidificati. Tutto si svolge dentro il
letter.save e quando va ad "esplodere" quel token, l'oggetto letter non
ha ancora un id e viene sollevata un'eccezione. Mi chiedo perchè questo
viene fatto prima e non dopo quando avrei già l'id, qualcuno si è giÃ
imbattuto o ha qualche idea?
on 2010-03-04 12:32
on 2010-03-04 12:55
Il 04 marzo 2010 12.32, Marco Mastrodonato <m.mastrodonato@gmail.com> ha scritto: > Ora che sto implementando un'altra creazione (massiva) mi viene molto > comodo utilizzare i modelli nidificati. Tutto si svolge dentro il > letter.save e quando va ad "esplodere" quel token, l'oggetto letter non > ha ancora un id e viene sollevata un'eccezione. Mi chiedo perchè questo > viene fatto prima e non dopo quando avrei già l'id, qualcuno si è già > imbattuto o ha qualche idea? Ciao, premetto che non ho mai usato PaperClip. Vediamo se ho capito: stai usando fields_for o qualcosa del genere? Se è così, quello che avviene è che viene invocato un metodo di Letter, qualcosa tipo attachments_attributes=, a cui viene passata della roba. Ciò avviene prima che venga invocato letter.save, e quindi l'id non c'è. Quanto alla soluzione, non ho idea. :( Se invece non ho capito, ignora per favore questo messaggio. pietro
on 2010-03-04 14:01
Ciao Pietro, ho risolto! Avrei potuto gestirmelo manualmente ma era un peccato rinunciare a quella genialiata di fields_for. Ho aggiunto un file paperclip in un progetto di prova che avevo usato per testare i modelli nidificati. Ho visto che li funzionava alla perfezione, il primo giro l'oggetto era nil ma poi dopo qualche tentativo l'oggetto veniva creato e riusciva ad ottenere l'id. Tutto questo dentro paperclip. Nel mio progetto invece, il tutto era sotto una transazione e dopo il primo giro veniva invocata la rollback perchè non era gestita l'eccezione all'interno di paperclip. Mi è bastato non far sollevare l'eccezione dentro il token: Paperclip::Attachment.interpolations[:letter_id] = proc do |attachment, style| attachment.instance.letter.id if attachment.instance.letter end Et voilà ! Grazie per la risposta.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.