Redirect root URL woanders in Rails-Anwendung
-
20-09-2019 - |
Frage
Ich habe Routen wie folgt aus:
map.namespace 'prepayments', :path_prefix => '/:locale/prepayments' do |prepayment|
prepayment.root :controller => 'login', :namespace => 'prepayments'
...
end
map.redirect '/', :controller => 'prepayments/login' # this is not working
# I tried also
map.root :controller => 'prepayments/login'
Was würde Ich mag es bekommen, dass nach der Eingabe. Www.example.com es mir www.example.com/en/prepayments umleiten würde
Früher, als ich map.root
von oben Beispiel verwenden es ist gerade im www.example.com und korrekten Sicht gemacht (aber es war ohne :locale
und es funktionierte gut), später habe ich :locale
auf meine Wege und aus dieser Zeit meine Sicht ( dass Anwendungen in irgendeiner Form) nicht ordnungsgemäß funktionieren. Ich bekomme Fehler, dass es nicht entsprechende Route für Form finden kann -. Was richtig ist, weil ich keinen :locale
bestanden habe
So, wie root auf eine andere Seite umgeleitet werden? Es wird wahrscheinlich richtigen Pfad muß generieren und durch http 302 passieren. Oder / Und wie man so etwas wie:
map.root :controller => 'prepayments/login', :my_locale => 'en'
EDIT: Meine Rake Routen sieht wie folgt aus:
prepayments_root /:locale/prepayments {:controller=>"prepayments/login", :action=>"index"}
prepayments_create /:locale/prepayments/send_email {:method=>:post, :controller=>"prepayments/login", :action=>"send_email"}
prepayments_home /:locale/prepayments/home {:controller=>"prepayments/prepayments", :action=>"home"}
prepayments_save /:locale/prepayments/save {:controller=>"prepayments/prepayments", :action=>"save"}
prepayments_agree /:locale/prepayments/agree {:controller=>"prepayments/prepayments", :action=>"agree"}
prepayments_disagree /:locale/prepayments/disagree {:controller=>"prepayments/login", :action=>"logout"}
prepayments_payment /:locale/prepayments/payment {:controller=>"prepayments/prepayments", :action=>"payment"}
prepayments_payment_email /:locale/prepayments/payment_email {:controller=>"prepayments/prepayments", :action=>"payment_email"}
/:locale/prepayments/:uid {:controller=>"prepayments/login", :action=>"verify"}
redirect / {:controller=>"prepayments/login", :action=>"index"}
EDIT:
Ich habe versucht, es in der Art und Weise Garrett vorgeschlagen und es funktionierte tun. Ich änderte Routen:
map.redirect '/', :controller => 'prepayments/login', :action => 'welcome'
und hinzugefügt willkommen Verfahren in der Steuerung:
def welcome
redirect_to prepayments_root_path(:locale => 'en')
end
Und es funktioniert, wie ich wollte (so es url in meinem Browser ändert).
Der andere Weg ist zu ändern Routen wie folgt aus:
map.root :controller => 'prepayments/login', :locale => 'en'
Es funktioniert auch, aber es wird Umleitung nicht (es url nicht in Browser ändern). Ich bin mir nicht sicher, ob es eine solche Option als map.redirect
. Ich fand es in den Beispielen auf www aber ich habe auch Plugin gefunden, dass eine solche Funktionalität hinzuzufügen.
Vielen Dank für die Hilfe!
Lösung
Sie müssen den Controller an einen Welcome
setzen oder was nicht, dann, wenn , die Controller getroffen wird, es auf die Route umleiten werden Sie wollen. Vielleicht Rails-3-Routing besser so für Sachen sein, aber jetzt für, erhalten Sie einen Haupt Root-Controller haben müssen.
Andere Tipps
In Rails 3 Sie schreiben können:
root :to => redirect('/prepayments')
Die folgende Seite hat eine gute Einführung in diese Umleitungen tun in Rails 3: http://www.railsdispatch.com/ Beiträge / Schienen-Routing
Umleitungsoptionen scheint nicht zu sein, dokumentiert zu gut.
Hier gehen Sie (@derek, siehe letztes Beispiel):
Umleitung auf eine Sub-Domain auf die Domain der aktuellen Anforderung
root to: redirect(subdomain: 'foo', path: '/bar') # => foo.example.com/bar
Umleitung mit substituierten params von dem angepassten Route
get 'stores/:name(*all)', to: redirect(subdomain: 'stores', path: '/%{name}%{all}')
Umleitung mit dem Statuscode (z. B. 302 statt Standard-301)
redirect(path: '/foo', status: 302)
Umleitung mit einem bedingten Block
redirect(status: 302) { |params, request|
case request.host
when 'localhost'
'/foo'
when /example.com$/
'/bar'
else
'/baz'
end
}
In Rails 4 (4.2.0 in meinem Fall), habe ich diese: match "*path" => "main#index", :via => [:get, :post]
zu app/config/routes.rb
Um herauszufinden, was Sie sollen anstelle von main
setzen. Schauen Sie in dieser Datei: app/controllers/main_controller.rb
. Auch hier können Sie nicht main_controller.rb
genannt werden, aber es wird something_controller.rb
, wahrscheinlich nicht application_controller.rb
oder servers_controller.rb
sein. In dieser Datei werden Sie einige Code, der wie folgt aussieht sehen:
class MainController < ApplicationController
def index
render :layout => "angular"
end
end
Wo es MainController , sollten Sie die Fehlermeldung zu sagen, die Lage sein, die in Ihrem Browser Schiene bietet, was von hier zu tun. Ersetzen Sie einfach main in match "*path" => "main#index", :via => [:get, :post]
mit dem, was das Präfix des Controllers ist.
Hope macht Sinn. Ich bin einen rubin Anfänger als auch