2017-02-14 1 views
0

Derzeit werden die abgerufenen Daten unter Verwendung von redirect_to, die GET verwendet, übergeben. Da in einigen Fällen der Datensatz groß ist, ist der URI zu lang und löst den Fehler Bad Request aus.Übergeben großer Datenmengen zwischen Controllern in Rails

Alle Online-Forschung sagt, es ist eine schlechte Idee, Daten in GET Körper zu übergeben. Gibt es eine bessere Möglichkeit, Daten an einen anderen Controller weiterzugeben?

Codeblock

def create 
    response_body = http_get('/data/I/want') 
    parsed_result = JSON.parse(response_body) 
    check_response(parsed_result) 
    redirect_to controller: :search_results, action: :index, results: parsed_result 
end 

Endpunkt in create genannt ist die Suchergebnisse so überprüfen müssen, wenn die Ergebnisse leer sind, bevor Umleitung und die Daten übergeben. Ich habe dieses Teil aus dem Codeblock

+0

Setzen Sie es in die db und lesen Sie in der anderen Steuerung? Oder schreibe es vielleicht in eine Datei? – Iceman

+0

@Iceman Ich könnte auch den Endpunkt in der anderen Steuerung nennen, aber es gibt Überprüfungen, die ich anwenden möchte (ich habe sie weggelassen, um den Codeblock klein zu halten), bevor ich auf eine neue Steuerung umschalte, daher eine neue Ansicht – user3241846

+0

Verwenden Sie Memcache, um dies zu tun, wenn Sie nicht aus der DB schreiben/lesen möchten. Eine andere Möglichkeit besteht darin, die Ansicht, die die zweite Controller-Aktion von der ersten Controller-Aktion abruft, zu "rendern", obwohl das einige der 'Arbeit' im zweiten Controller auf ein Modell oder anderswo verschieben müsste, also beide Controller- Aktionen können darauf zugreifen. So habe ich ein ähnliches Problem gelöst. – JosephK

Antwort

1

weggelassen. Jeder Grund, diese Codes in create Methode zu setzen? Aus meiner Sicht erzeugt Ihr Code nichts wirklich. Es werden nur einige JSON-Daten von einer Remote-URL abgerufen und an search_results#index weitergeleitet. Warum laden Sie nicht einfach den JSON unter search_results#index direkt?

aktualisiert

Es ist zu großzügig mehr als 3 Routen für eine Suchaktion zu verwenden. Ich habe zwei Vorschläge:

  1. Suche in Remote-JSON, wenn Sie es steuern können. Übergeben Sie einfach das Such-Keyword in URL und lassen Sie es remote auflösen.

  2. Wenn Sie den Remote-JSON nicht steuern können, führen Sie die Suche mit AJAX-Aufruf aus. Machen Sie in Ihrer search_results#index einen AJAX-Anruf zu Ihrer so etwas wie search#new JSON-Route und holen Sie das gefilterte Ergebnis.

+0

Ich habe einige Überprüfungen entfernt, die ich in meinem Code habe, um den Block klein zu halten, aber er prüft, ob es Ergebnisse gibt, bevor er zum neuen Controller umgeleitet wird (daher neue Ansicht). Ich möchte nicht umleiten, bis ich sicher bin, dass Ergebnisse angezeigt werden. Wenn ich in meiner Anzeigeseite 'search_results # index' abrufe und es keine Ergebnisse gibt, muss ich für eine weitere Suche zurück zu' search # new' umleiten. Hoffnung, die Sinn macht – user3241846

Verwandte Themen