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"}