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"}
希望你觉得这个有用。
dashboard_path是一个字符串,因此您无法调用#controller和#action方法。只需尝试controller_name和method_name。或者PARAMS [:控制器],而params [:行动]
我们可以做PARAMS [:控制器一旦点击该链接后,但我要如何命名路由查找控制器名称.. –
的params
哈希总是包含:controller
和:action
键,你可以试试这个
def check_link(path)
controller_name = params[:controller]
method_name = params[:action]
end
我们可以做PARAMS [:控制器一旦点击该链接后,却怎么我是否从指定路线中找到控制器名称... –
ActionDispatch ::路由:: RouteSet#recognize_path
这可能有所帮助。这将给出路径映射到哪个控制器的动作。
Rails.application.routes.recognize_path('/my_path')
如果此解决方案适用于您,那么您可以“接受”这个答案:) – przbadu