Pregunta

Tengo rutas como esta:

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'

Lo que me gustaría conseguir es que después de escribir: www.example.com sería mi redirigir a www.example.com/en/prepayments

.

A principios de cuando solía map.root desde arriba ejemplo, sólo se quedó en www.example.com y rindió punto de vista correcto (pero era sin :locale y funcionó bien), más tarde añadí :locale a mis rutas y desde este momento mi punto de vista ( que utiliza alguna forma) no funciona correctamente. Me sale error que no puede encontrar la ruta correspondiente a la forma - que es justo, porque no pasa ningún :locale

.

Por lo tanto, la forma de redirigir la raíz a otra página? Probablemente tendrá que generar ruta correcta y pasarlo a través de HTTP 302. O / y cómo hacer algo como:

map.root :controller => 'prepayments/login', :my_locale => 'en'

EDIT: Mis rutas rastrillo se ve así:

         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:

He intentado hacer de la manera Garrett propuso y funcionó. He cambiado rutas:

map.redirect '/', :controller => 'prepayments/login', :action => 'welcome'

y añadido método de bienvenida en el controlador:

def welcome
  redirect_to prepayments_root_path(:locale => 'en')
end

Además, funciona como quería (por lo que cambiar URL en el navegador).

La otra forma es cambiar rutas como esta:

map.root :controller => 'prepayments/login', :locale => 'en'

También funciona, pero no está redirigiendo (que no cambia url en el navegador). No estoy seguro de si hay opción como map.redirect. Lo encontré en ejemplos sobre www pero también me encontré plugin que añadir esa funcionalidad.

Gracias por la ayuda!

¿Fue útil?

Solución

Usted tendrá que ajustar el controlador a un Welcome o lo que no, entonces cuando que controlador es golpeado, volverá a dirigir a la ruta que desea. Tal vez Rails 3 enrutamiento será mejor para este tipo de cosas, pero por ahora, tendrá que tener un controlador principal de la raíz.

Otros consejos

En Rails 3 se puede escribir:

root :to => redirect('/prepayments')

La siguiente página tiene una buena introducción a hacer estas redirecciones en Rails 3: http://www.railsdispatch.com/ mensajes / carriles-routing

o redirección no parecen ser documentado muy bien.
aquí tienes (@derek, ver ejemplo anterior):

redirigir a un subdominio en el dominio de la solicitud actual

root to: redirect(subdomain: 'foo', path: '/bar') # => foo.example.com/bar

redirigir con params sustituidos de la ruta emparejado

get 'stores/:name(*all)', to: redirect(subdomain: 'stores', path: '/%{name}%{all}')

redirigir con código de estado (por ejemplo. 302 en lugar de defecto 301)

redirect(path: '/foo', status: 302)

redirigir con un bloque condicional

redirect(status: 302) { |params, request|
  case request.host
  when 'localhost'
    '/foo'
  when /example.com$/
    '/bar'
  else
    '/baz'
  end
}

En los carriles 4 (4.2.0 en mi caso), añadí esto: match "*path" => "main#index", :via => [:get, :post] a app/config/routes.rb

.

Para saber lo que se supone que poner en su lugar de main. Busque en este archivo: app/controllers/main_controller.rb. Una vez más, el suyo no puede ser llamado main_controller.rb, pero será something_controller.rb, probablemente no application_controller.rb o servers_controller.rb. En ese archivo, verá un código que se parece a esto:

class MainController < ApplicationController
  def index
    render :layout => "angular"
  end
end

Donde hay MainController , debería ser capaz de decir por el mensaje de error que proporciona los carriles en su navegador qué hacer desde aquí. Basta con sustituir principal en match "*path" => "main#index", :via => [:get, :post] con lo que el prefijo del controlador es.

Espero que esto tiene sentido. Soy un principiante rubí, así

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top