2012-12-12 14 views
6

Ho un modello di risorsa attiva che deve impostare un'intestazione prima di inviare/salvare i file di salvataggio e update_attributes. Il problema è che il valore dell'intestazione deve essere diverso per ogni utente, quindi non può essere impostato a livello di modello. Ho visto esempi per l'impostazione di intestazioni come parte di un-o di metodi personalizzati, ma non è possibile aggiungerlo a @myclass.save. Qualcosa come prefix_options ma per le intestazioni sarebbe l'ideale (@myclass.prefix_options[:myvar] = 'abcd') ma non ho trovato nulla di simile. Qualsiasi intuizione sarebbe apprezzata.impostazione delle intestazioni nella richiesta di risorsa attiva

risposta

5

Ho appena avuto un problema simile e overrode .headers sulla mia classe ActiveResource. ActiveResource::Base.headers è solo un hash per impostazione predefinita, ma puoi sovrascriverlo come metodo! < 3 U Rubino.

http://rmosolgo.github.io/blog/2014/02/05/dynamically-generated-headers-for-activeresource-requests/

+0

Questo funziona come descritto per l'impostazione di intestazioni basate su alcuni dati costanti, ma non ti consente di ottenere qualcosa dalla richiesta corrente, giusto? (ad esempio 'request.host' o variabili di sessione) - Quale potrebbe non essere ciò che l'OP voleva, ma volevo solo chiarire l'ambito della soluzione, perché sto cercando un modo per fare quest'ultimo. – mltsy

2

Ho appena controllato il codice per 3.2.8 e sembra che non sia supportato. Anche io non vedo molte opportunità per ricominciare a capirlo.

https://github.com/rails/rails/blob/c2193c11ad215d3a2d7d35960630b3e1902a5082/activeresource/lib/active_resource/base.rb#L1359

Si woud essere un grande cerotto a presentare, però, soprattutto ora che ActiveResource è stato scisso in proprio gioiello per 4,0.

aggiornamento

in realtà è possibile specificare le intestazioni con una richiesta POST crudo. proprio non li può specificare con i metodi più astratti come create:

https://github.com/rails/rails/blob/c2193c11ad215d3a2d7d35960630b3e1902a5082/activeresource/lib/active_resource/connection.rb#L97

+0

Grazie per la risposta, John. Questo è un po 'quello che stavo già pensando, quindi come soluzione alternativa ho scritto una classe che estende aRes, e sovrascrive save e update_attributes. Il mio modello estenderà quindi quella classe. Lontano dall'ideale, ma sembra funzionare. Forse lo invierò come patch ad aRes a meno che non sia lì per progetto. L'ho lasciato aperto per un po 'nel caso qualcuno fosse a conoscenza di un'alternativa –

Problemi correlati