2016-07-11 9 views
4

Ich verwende Rails 4.2.3. Ich habe nach dem in der create-Methode meiner ControllerWie erzwinge ich eine bestimmte URL nach einer Rails-Umleitung?

format.html { redirect_to controller: "my_objects", action: "index", notice: 'Saved successfully.' } 

Allerdings, wenn ich umleiten, ist die URL tatsächlich

http://mydomein.devbox.com:3000/my_objects 

und ich möchte es

http://mydomein.devbox.com:3000/my_objects/index 

Wie sein kann ich Erzwingen Sie die URL als "/ index" statt wie jetzt?

Edit: Hier sind die Protokolle bei einem Besuch/my_objects/index:

Started GET "/my_objects/index" for 127.0.0.1 at 2016-07-12 12:17:25 -0500 
Processing by MyObjectsController#index as HTML 
DEPRECATION WARNING: Passing a nested array to Active Record finder methods is deprecated and will be removed. Flatten your array before using it for 'IN' conditions. (called from country_code_select at /Users/davea/Documents/workspace/runtrax/app/helpers/user_form_helper.rb:83) 
    Rendered my_objects/_add.html.erb (31.0ms) 
    Rendered my_objects/index.html.erb within layouts/race (46.0ms) 
    Rendered layouts/_navigation.html.erb (0.2ms) 
    Rendered layouts/_messages.html.erb (0.1ms) 
    Rendered my_objects/_tabs.html.erb (0.3ms) 
Completed 200 OK in 308ms (Views: 301.9ms | ActiveRecord: 4.8ms) 

Edit: Hier ist der relevante Teil aus der config/routes.rb Datei ...

get 'my_objects/index' 
    get 'my_objects/create' 
    resources :my_objects do 
    collection do 
     post 'create' 
     get 'import' 
     get 'index' => 'my_objects/index' 
     get 'search' 
     get 'stats' 
    end 
    end 

Antwort

0

Die umgeleitete URL nach Schienenkonvention leitet zur Indexaktion um. Überprüfen Sie Ihre Protokolle, um zu sehen, was passiert. Wenn Sie/my_objects/index verwenden, teilen Sie den Schienen mit, dass Sie das my_object mit ID = index möchten.

+0

Ich glaube nicht, was Sie Ich sage es ist a Genau, weil ich "/ my_objects/index" in einen Webbrowser eingeben kann und die Seite, die ich sehen möchte, wenn sie richtig gerendert wird. Laut Ihrer Anfrage habe ich die Protokolle bei der Eingabe einer solchen URL eingefügt. Wenn ich meinen Controller umadressiere, möchte ich, dass das Ergebnis der Eingabe von "/ my_objects/index" entspricht. Wie mache ich das? –

0

Können Sie bitte Ihre routes.rb veröffentlichen, weil es können Sie angeben, wie Sie eine Route wie diese:

get 'my_objects/index' => 'my_objects # index'

und dann in der Steuerung Sie tun nur

redirect_to my_objects

+0

Ich habe die Datei config/routes.rb hinzugefügt, die auch einen Vorschlag enthält und meine Controller-Weiterleitung in "format.html {redirect_to controller:" my_objects "geändert hat, Hinweis: 'Erfolgreich gespeichert.' } "aber ich werde immer noch zu"/my_objects "statt"/my_objects/index "weitergeleitet. –

+0

dann tun Sie es als Redirect get '/ my_objects', um: redirect ('/ my_objects/index'). Lass es mich wissen, aber ja, es ist seltsam, dass du in der URL erzwingen/indexieren kannst und es funktioniert, weil der Index in diesem Fall die ID wäre. Warum willst du/index zeigen?Das Framework von Rails basiert auf dem Prinzip convention over configuration und so ist die Konvention für die Sammlung aller Objekte aus dem Modell MyObjects, die Sie über ruhige Routen verfügen müssen, und my_objects_path würde diese Sammlung @ .../my_objects über den Index des Controllers anzeigen Aktion. Lesen Sie hier mehr: http://guides.rubyonrails.org/routing.html – loloso

+0

Wenn Sie sagen, "dann tun Sie es als Redirect get '/ my_objects', um: redirect ('/ my_objects/index')", was tun meinst du genau? Was ist zu tun? –

0

In den Routen ändern Sie diese Zeile

get "index" => "my_object#index" 

Um

get "index" => "my_object#index", as: :my_object_index 

Dann auf diesen Pfad umleiten

redirect_to my_object_index_path, notice: "saved successfully" 
+0

Es passiert, weil Rails standardmäßig den Index von der URL weglässt. Sie müssen die Route explizit benennen, da my_objects_path immer noch die Standardroute verwendet, die beim Aufruf von Ressourcen erstellt wurde: my_objects –

+0

Auch Ihre Syntax ist falsch, wenn Sie redirect_to aufrufen. Fügen Sie keinen Controller hinzu: "my_objects". Benutze einfach den Pfad. Genau wie ich es hier gemacht habe –

+0

Kein Würfel. Ich habe meine config/routes.rb-Datei in das geändert, was Sie vorgeschlagen haben, aber diese Zeile, die Sie angegeben haben: "format.html {redirect_to my_object_index_path, notice: 'Saved successfully.' } "leitet zu/my_objects und not/my_objects/index um. –

Verwandte Themen