2016-06-15 5 views
0

Ich habe eine Rails-Website mit i18, in dem ein Benutzer Sprache in der Menüleiste wechseln kann, 'en' und 'km' in meinem Fall.Rails Internationalisierung Sprachumschaltung No Route Matches auf Fehler Validation Form Update

Was ich von switching language Ansatz verstehe, ist das Zusammenführen des aktuellen Param mit dem Gebietsschema. 'Get' Methode ist passiert, nehme ich an.

Ich habe eine Ressource, "Produkte" zum Beispiel. Die Produktressource hat keine 'show'-Seite.

resources :products, except: [:show] 

Wenn ein Produkt mit ungültigen Daten aktualisiert wird. Lassen Sie mich sagen, ich habe eine Validierung des Vorhandenseins des Namens des Produkts, aber ich lasse den Produktnamen in meinem Formular leer. Dann wird das Formular wieder in das 'Edit'-Formular gerendert, aber die' update'-Aktion, aber beachte, dass 'url' '/ products/id' ist, was genau wie 'show'-Aktion ist.

In diesem Schritt wechsle ich die Sprache. Wie erwartet, wird das Gebietsschema mit dem aktuellen Parameter zusammengeführt. Also, die 'get' Methode ist jetzt passiert mit der URL 'Produkte/ID? _method = Patch ...'

Keine Route Übereinstimmungen erhöht, da ich keine 'Show' Aktion habe.

Kann mir jemand bitte einen guten Weg vorschlagen, damit umzugehen? Ich kann dieses Problem umgehen, indem ich die "get" -Methode von "show" action an eine beliebige Stelle umleite, so wie ihre Indexseite. Wie auch immer, ich frage mich, ob es bessere Wege gibt.

Danke,

Antwort

0

resources erstellen eine Abbildung wie:

  • GET /products - ProductsController#index
  • GET /products/:id-ProductsController#show (in Ihrem Fall nicht vorhanden)
  • GET /products/:id/edit-ProductsController#edit
  • PUT /products/:id-ProductsController#update
  • POST /products-ProductsController#create
  • DELETE /products/:id - ProductsController#destroy

Der Grund, warum Sie /products/:id in der URL sehen ist, da dies die Standardroute für die update Aktion. Was können Sie tun, ist

resources :products, except: [:show] 

zu

resources :products, except: [:edit] 

und zeigen die Ausgabe Form in ProductsController#show zu ändern. Wenn zwischen dem Anzeigen und Bearbeiten des Produkts kein Unterschied besteht, müssen Sie die Edition nicht in der Route mit dem Suffix /edit angeben.

+0

GET wurde Wie ich es verstehe, ist die Art und Weise, wie Sie erwähnt haben, einen Ort zu erhalten, Seite in diesem Fall anzeigen, sobald die Update-Informationen ungültig sind. Es ist meine Schuld, dass ich vergessen habe, etwas über das Erstellen eines neuen Objekts zu erwähnen. Es passiert wie die Aktualisierung. Also, ich fürchte, wir können keinen Platz für diesen Fall erhalten, da die URL nach der ungültigen neuen Objekt-Erstellung '/ products' ist, die genau 'index' Seite ist. –

0

Wie viele Benutzer werden die Sprachen erst wechseln, nachdem die Validierung fehlgeschlagen ist? Nicht so viele, denke ich.

So eine einfache Lösung wäre:

  • Änderung locale und zeigen die gleiche Seite, wenn Methode
  • Änderung locale GET war und Umleitung zu Hause wenn Methode NICHT
+0

Natürlich nicht viele, aber einige. Für mich ist es ein bisschen nervig, mich auf eine andere Seite zu bringen, von der ich nicht erwarte. Deshalb möchte ich viel Ahnung haben. Ich werde über deine Idee nachdenken. Wie auch immer, lass mich einfach von einem anderen hören. –

Verwandte Themen