Rails:如何获得Restfull命名路由的控制器和方法名称?

问题描述:

在我的HTML视图Rails:如何获得Restfull命名路由的控制器和方法名称?

<% if check_link(dashboard_path) %> 
    <%= link_to "Products", dashboard_path, class: controller_name == "dashboard" ? "active" : nil %> 
<% end %> 

在check_link helper方法:

def check_link(path) 
    controller_name = path.controller 
    method_name = path.action 

    then i have some extra access verification code ............ 

    end 

但是,我在浏览器中获取错误象下面这样:

未定义的方法`控制器”为“/admin/dashboard“:字符串

现在,我的问题是如何从“命名路线(dashboard_path)”找到控制器和方法名称。请有人帮我解决这个问题。

可以使用Rails.application.routes.recognize_path提取您的:controller:action

def check_link(path) 
    extracted_path = Rails.application.routes.recognize_path(path) 


    controller = extracted_path[:controller] 
    action = extracted_path[:action] 

    # your rest of the codes goes here 
end 

Rails.application.routes.recognize_path('/parties/autocomplete_party_name_last', {:method => :get}) 

# Output will be  
{:action=>"autocomplete_party_name_last", :controller=>"parties"} 

OR 

Rails.application.routes.recognize_path('/transcriptions/2/edit') 

# Output will be  
=> {:action=>"edit", :controller=>"transcriptions", :id=>"2"} 

如果你的路径不正确,那么你会得到这样的事情:

Rails.application.routes.recognize_path('dashboards/index') 

# output will be 
=> {:controller=>"pages", :action=>"page_not_found", :url=>"dashboards/index"} 

希望你觉得这个有用。

+0

如果此解决方案适用于您,那么您可以“接受”这个答案:) – przbadu

dashboard_path是一个字符串,因此您无法调用#controller和#action方法。只需尝试controller_name和method_name。或者PARAMS [:控制器],而params [:行动]

+1

我们可以做PARAMS [:控制器一旦点击该链接后,但我要如何命名路由查找控制器名称.. –

params哈希总是包含:controller:action键,你可以试试这个

def check_link(path) 
    controller_name = params[:controller] 
    method_name = params[:action] 
end 
+1

我们可以做PARAMS [:控制器一旦点击该链接后,却怎么我是否从指定路线中找到控制器名称... –

ActionDispatch ::路由:: RouteSet#recognize_path

这可能有所帮助。这将给出路径映射到哪个控制器的动作。

Rails.application.routes.recognize_path('/my_path')