Ich möchte in der Lage sein, von einer Controller-Aktion zu einer anderen bedingt zu senden, basierend auf einer Kombination von Abfrageparametern und Daten in der Datenbank.Was ist der richtige Weg, um eine Controller-Aktion von einer anderen Controller-Aktion ohne HTTP-Umleitung auszuführen?
Was ich jetzt habe, ist so etwas wie:
class OldController < ApplicationController
def old_controller_action
if should_use_new_controller
new_params = params.dup
new_params[:controller] = "new_controller_action"
redirect_to new_params
return
end
# rest of old and busted
end
end
class NewController < ApplicationController
def new_controller_action
# new hotness
end
end
Das funktioniert ganz gut, aber es gibt eine HTTP-Umleitung, die langsam ist. Ich würde gerne in der Lage sein, dasselbe zu tun, aber innerhalb derselben HTTP-Anfrage.
Gibt es einen sauberen Weg, dies zu tun?
Edit: Das Kopfgeld wird an jemanden gehen, der mir einen sauberen Weg zeigen kann, der die Controller und ihre Aktionen relativ unberührt lässt (anders als der Redirect-Code selbst).
Ja, ich hatte auch daran gedacht, obwohl es aus Sicht der Code-Organisation keine besonders aufregende Option ist. –
Es ist eigentlich in Ordnung, da es auf zusammenhängenden Methode erstellt von zwei Orten, die leicht testbar ist –