Ich habe Routen wie diese:
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 ich gerne hätte, ist, dass ich nach der Eingabe von: www.example.com auf www.example.com/en/prepayments weitergeleitet werde.
Früher, als ich noch map.root
aus obigem Beispiel blieb es einfach bei www.example.com und renderte die korrekte Ansicht (aber es war ohne :locale
und es hat gut funktioniert), später habe ich :locale
zu meinen Routen und seit dieser Zeit funktioniert meine Ansicht (die ein Formular verwendet) nicht mehr richtig. Ich erhalte die Fehlermeldung, dass die entsprechende Route für das Formular nicht gefunden werden kann - was richtig ist, da ich keine :locale
.
Wie kann man Root also auf eine andere Seite umleiten? Es wird wahrscheinlich brauchen, um den richtigen Pfad zu generieren und übergeben Sie es durch http 302. Oder/und wie man etwas wie zu machen:
map.root :controller => 'prepayments/login', :my_locale => 'en'
EDIT: Meine Rechentrassen sehen so 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 so zu machen, wie Garrett es vorgeschlagen hat, und es hat funktioniert. Ich habe die Routen geändert:
map.redirect '/', :controller => 'prepayments/login', :action => 'welcome'
und fügte die Methode welcome in den Controller ein:
def welcome
redirect_to prepayments_root_path(:locale => 'en')
end
Und es funktioniert so, wie ich es wollte (d.h. es ändert die URL in meinem Browser).
Die andere Möglichkeit ist, die Route so zu ändern:
map.root :controller => 'prepayments/login', :locale => 'en'
Es funktioniert auch, aber es wird nicht weitergeleitet (die URL im Browser wird nicht geändert). Ich bin nicht sicher, ob es eine solche Option gibt wie map.redirect
. Ich habe es in den Beispielen auf www gefunden, aber ich habe auch Plugins gefunden, die diese Funktionalität hinzufügen.
Danke für die Hilfe!