with redirect_to redirect_back rails method ruby-on-rails-3

ruby-on-rails-3 - redirect_to - render redirect rails



Buena forma de obtener el nombre del controlador de un request.referer en Rails (3)

Aquí está mi intento que funciona con Rails 3 y 4. Este código extrae un parámetro al cerrar la sesión y redirige al usuario a la página de inicio de sesión personalizada, de lo contrario, redirige a la página de inicio de sesión general. Puede extraer fácilmente :controller esta manera. Parte del controlador:

def logout auth_logout_user path = login_path begin refroute = Rails.application.routes.recognize_path(request.referer) path = subscriber_path(refroute[:sub_id]) if refroute && refroute[:sub_id] rescue ActionController::RoutingError #ignore end redirect_to path end

Y las pruebas también son importantes:

test "logout to subscriber entry page" do session[:uid] = users(:user1).id @request.env[''HTTP_REFERER''] = "http://host/s/client1/p/xyzabc" get :logout assert_redirected_to subscriber_path(''client1'') end test "logout other referer" do session[:uid] = users(:user1).id @request.env[''HTTP_REFERER''] = "http://anyhost/path/other" get :logout assert_redirected_to login_path end test "logout with bad referer" do session[:uid] = users(:user1).id @request.env[''HTTP_REFERER''] = "badhost/path/other" get :logout assert_redirected_to login_path end

Sé que puedo usar request.referrer para obtener la URL completa de la solicitud en Rails, pero ¿hay una manera de obtener el nombre del controlador de la solicitud?

Quiero ver si la URL de http://myurl.com/profiles/2 incluye "perfiles"

Sé que puedo usar una expresión regular para hacerlo, pero me pregunté si había una mejor manera.


Dentro del controlador, tiene el método controller_name que le devuelve solo el nombre. En su caso, devolvería "perfiles". También puede usar params[:controller] que devuelve la misma cadena.


Tenga en cuenta que request.referrer le da la url de la solicitud antes de la actual. Dicho esto, aquí es cómo puede convertir request.referrer a la información del controlador / acción:

Rails.application.routes.recognize_path(request.referrer)

debería darte algo como

{:controller => "x", :action => "y"}