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!

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top