Redirect URL principale da qualche altra parte in applicazione Rails
-
20-09-2019 - |
Domanda
Ho percorsi come questo:
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'
Quello che vorrei ottenere è che dopo la digitazione: www.example.com mi avrebbe reindirizzare ad www.example.com/en/prepayments
. Prima, quando ho usato map.root
dall'alto esempio appena stati al www.example.com e reso corretta visione (ma era senza :locale
e ha funzionato bene), poi ho aggiunto :locale
ai miei percorsi e da questo momento mio punto di vista ( che utilizza una qualche forma) non funziona correttamente. Ottengo l'errore che non riesce a trovare percorso corrispondente per il modulo - che è giusto, perché non ho alcun passo :locale
Quindi, come per reindirizzare radice ad un'altra pagina? Sarà probabilmente necessario generare percorso corretto e farla passare attraverso http 302. O / E come fare qualcosa di simile:
map.root :controller => 'prepayments/login', :my_locale => 'en'
EDIT: I miei percorsi rake aspetto:
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:
Ho provato a farlo in modo Garrett ha proposto e ha funzionato. Ho cambiato le rotte:
map.redirect '/', :controller => 'prepayments/login', :action => 'welcome'
e ha aggiunto metodo benvenuti nel controllore:
def welcome
redirect_to prepayments_root_path(:locale => 'en')
end
E funziona come avrei voluto (in modo che i cambiamenti URL nel browser).
L'altro modo è quello di cambiare le rotte come questo:
map.root :controller => 'prepayments/login', :locale => 'en'
Funziona anche, ma non sta riorientando (non cambia URL nel browser). Non sono sicuro se c'è tale opzione come map.redirect
. L'ho trovato in esempi su www, ma ho anche scoperto plugin che aggiunge tale funzionalità.
Grazie per l'aiuto!
Soluzione
Sarà necessario impostare il controller a un Welcome
o meno quello che, poi, quando che di controllo viene colpito, si reindirizzerà al percorso che si desidera. Forse Rails 3 di routing sarà meglio per cose come questa, ma per adesso, sarà necessario avere un controller radice principale.
Altri suggerimenti
In Rails 3 è possibile scrivere:
root :to => redirect('/prepayments')
La seguente pagina ha una buona introduzione a fare questi redirect in Rails 3: http://www.railsdispatch.com/ messaggi / rotaie-routing
redirect opzioni non sembrano essere documentato troppo bene.
qui si va (@derek, vedi ultimo esempio):
reindirizzare a un sottodominio sul dominio del richiesta corrente
root to: redirect(subdomain: 'foo', path: '/bar') # => foo.example.com/bar
reindirizzare con params sostituiti dal percorso abbinato
get 'stores/:name(*all)', to: redirect(subdomain: 'stores', path: '/%{name}%{all}')
reindirizzare con codice di stato (ad es. 302 anziché predefinito 301)
redirect(path: '/foo', status: 302)
reindirizzare con un blocco condizionale
redirect(status: 302) { |params, request|
case request.host
when 'localhost'
'/foo'
when /example.com$/
'/bar'
else
'/baz'
end
}
In Rails 4 (4.2.0 nel mio caso), ho aggiunto questo: match "*path" => "main#index", :via => [:get, :post]
a app/config/routes.rb
Per sapere ciò che si suppone di mettere in atto delle main
. Guardate in questo file: app/controllers/main_controller.rb
. Anche in questo caso, il vostro non possono essere chiamati main_controller.rb
, ma sarà something_controller.rb
, probabilmente non application_controller.rb
o servers_controller.rb
. In quel file, vedrete un codice simile a questo:
class MainController < ApplicationController
def index
render :layout => "angular"
end
end
Dove c'è MainController , si dovrebbe essere in grado di dire dal messaggio di errore che Rails fornisce nel browser che cosa fare da qui. Basta sostituire principale in match "*path" => "main#index", :via => [:get, :post]
con qualunque sia il prefisso del controller è.
Spero che questo ha un senso. Io sono un principiante rubino e