2012-12-12 9 views
6

Ich habe ein Active Resource-Modell, das eine Kopfzeile festlegen muss, bevor Sie save und update_attributes posten/setzen. Das Problem besteht darin, dass der Headerwert für jeden Benutzer unterschiedlich sein muss, sodass er nicht auf Modellebene festgelegt werden kann. Ich habe Beispiele für das Setzen von Headern als Teil einer find, get oder benutzerdefinierten Methoden gesehen, aber keine Möglichkeit, es zu einer @myclass.save hinzuzufügen. Etwas wie prefix_options aber für Header wäre ideal (@myclass.prefix_options[:myvar] = 'abcd'), aber ich habe nichts dergleichen gefunden. Jeder Einblick würde geschätzt werden.Setzen der Kopfzeilen in der aktiven Ressourcenanforderung

Antwort

5

Ich hatte gerade ein ähnliches Problem und overrode .headers auf meiner Active Klasse. ActiveResource::Base.headers ist standardmäßig nur ein Hash, aber Sie können es überschreiben, um eine Methode zu sein! < 3 HE Rubin.

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

+0

Dies funktioniert wie für das Setzen von Kopfzeilen auf der Grundlage einiger konstanter Daten beschrieben, aber erlaubt Ihnen nicht, etwas aus der aktuellen Anfrage richtig zu bekommen? (d. h. 'request.host' oder Sitzungsvariablen) - Was vielleicht nicht das ist, was das OP wollte, sondern nur den Umfang der Lösung verdeutlichen wollte, weil ich nach einer Möglichkeit suche, letzteres zu tun. – mltsy

2

Ich habe gerade den Code für 3.2.8 eingecheckt, und es sieht so aus, als ob es nicht unterstützt wird. Ich sehe auch nicht viel Gelegenheit, es zu monkeyen. obwohl vorzulegen, vor allem jetzt, dass Active wurde abspalten in sein eigenes Schmuckstück für 4,0

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

Es woud ein großer Patch sein.

Update

tatsächlich können Sie Header mit einer rohen Post-Anforderung angeben. Sie können nicht nur sie mit den abstraktere Methoden wie create angeben:

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

+0

Vielen Dank für Ihre Antwort John. Das ist eine Art von dem, was ich bereits dachte, also habe ich als Workaround eine Klasse geschrieben, die aRes erweitert und save und update_attributes überschreibt. Mein Modell wird dann diese Klasse erweitern. Weit davon entfernt, ideal zu sein, scheint aber zu funktionieren. Vielleicht werde ich das als Patch für aRes einreichen, es sei denn, es ist vom Design her da. Ich lasse das für eine Weile offen für den Fall, dass jemand von einer Alternative weiß –