Pregunta Redirigir la url raíz a otro lugar en la aplicación Rails


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 obtener es que después de tipear: www.example.com me redirija a www.example.com/en/prepayments.

Antes cuando usé map.root del ejemplo anterior simplemente se quedó en www.example.com y visualizó la vista correcta (pero fue sin :locale y funcionó bien), luego agregué :locale a mis rutas y desde este momento mi vista (que usa algún formulario) no funciona correctamente. Me da error de que no puede encontrar la ruta correspondiente para la forma, lo cual es correcto, porque no pasé ningún :locale.

Entonces, ¿cómo redirigir la raíz a otra página? Probablemente necesite generar la ruta correcta y pasarla por http 302. O / Y cómo hacer algo como:

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

EDITAR: Mis rutas de rake se ven 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"}

EDITAR:

Intenté hacerlo de la forma propuesta por Garrett y funcionó. Cambié las rutas:

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

y método de bienvenida agregado en el controlador:

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

Y funciona como yo quería (por lo que cambia la URL en mi navegador).

La otra forma es cambiar rutas como esta:

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

También funciona, pero no está redirigiendo (no cambia la URL en el navegador). No estoy seguro si hay tal opción como map.redirect. Lo encontré en ejemplos en www pero también encontré el complemento que agrega esa funcionalidad.

¡Gracias por la ayuda!


27
2018-01-14 18:25


origen


Respuestas:


Deberá configurar el controlador a Welcome o qué no, entonces cuando ese El controlador recibe un golpe, redirigirá a la ruta que desee. Quizás el enrutamiento de Rails 3 sea mejor para cosas como esta, pero por ahora, necesitarás tener un controlador raíz principal.


-4
2018-01-14 18:28



En Rails 3 puedes escribir:

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

La siguiente página tiene una buena introducción para hacer estos redireccionamientos en Rails 3: http://www.railsdispatch.com/posts/rails-routing


129
2017-09-02 16:53



Opciones de redirección no parece ser documentado demasiado bien.
aquí tienes (@derek, mira el último ejemplo):

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 coincidente

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

redirigir con el código de estado (por ejemplo, 302 en lugar de predeterminado 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
}

34
2017-08-02 12:51



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

Para saber qué debe colocar en lugar de main. Mire en este archivo: app/controllers/main_controller.rb. Nuevamente, no se puede llamar el suyo main_controller.rb, pero será something_controller.rbprobablemente NO  application_controller.rb o servers_controller.rb. En ese archivo, verá un código que se ve así:

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

Donde hay MainController, deberías poder decir por el mensaje de error que Rails proporciona en tu navegador qué hacer desde aquí. Simplemente reemplace principal en match "*path" => "main#index", :via => [:get, :post] con lo que sea el prefijo del controlador.

Espero que esto tenga sentido. Soy un principiante ruby ​​también


0
2018-04-14 06:41