Ответ 1
Внутри контроллера у вас есть метод controller_name
, который возвращает вам только имя. В вашем случае он будет возвращать "профили".
Вы также можете использовать params[:controller]
, который возвращает ту же строку.
Я знаю, что могу использовать request.referrer
для получения полного URL-адреса реферера в Rails, но есть ли способ просто получить имя контроллера из URL-адреса?
Я хочу посмотреть, содержит ли URL-адрес http://myurl.com/profiles/2 "профили"
Я знаю, что могу использовать регулярные выражения для этого, но мне было интересно, есть ли лучший способ.
Внутри контроллера у вас есть метод controller_name
, который возвращает вам только имя. В вашем случае он будет возвращать "профили".
Вы также можете использовать params[:controller]
, который возвращает ту же строку.
Имейте в виду, что request.referrer
дает URL-адрес запроса перед текущим. Тем не менее, вот как вы можете преобразовать request.referrer
в информацию о контроллере /actionn:
Rails.application.routes.recognize_path(request.referrer)
он должен дать вам что-то вроде
{:controller => "x", :action => "y"}
Вот моя попытка, которая работает с Rails 3 и 4. Этот код извлекает один параметр при выходе из системы и перенаправляет пользователя на пользовательскую страницу входа в систему, иначе он перенаправляется на общую страницу входа.
Вы можете легко извлечь :controller
таким образом. Часть контроллера:
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
И тесты также важны:
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