我知道我可以用来request.referrer
在 Rails 中获取完整的引用 URL,但是有没有办法从 URL 中获取控制器名称?
我想看看http://myurl.com/profiles/2的 URL 是否包含“profiles”
我知道我可以使用正则表达式来做到这一点,但我想知道是否有更好的方法。
我知道我可以用来request.referrer
在 Rails 中获取完整的引用 URL,但是有没有办法从 URL 中获取控制器名称?
我想看看http://myurl.com/profiles/2的 URL 是否包含“profiles”
我知道我可以使用正则表达式来做到这一点,但我想知道是否有更好的方法。
请记住,request.referrer
它会在当前请求之前为您提供请求的 url。也就是说,您可以通过以下方式转换request.referrer
为控制器/操作信息:
Rails.application.routes.recognize_path(request.referrer)
它应该给你类似的东西
{:subdomain => "", :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
在控制器内部,您拥有controller_name
只返回名称的方法。在您的情况下,它将返回“配置文件”。您也可以使用params[:controller]
which 返回相同的字符串。