1

在我的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)」找到控制器和方法名稱。請有人幫我解決這個問題。

回答

4

可以使用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

-1

dashboard_path是一個字符串,因此您無法調用#controller和#action方法。只需嘗試controller_name和method_name。或者PARAMS [:控制器],而params [:行動]

+1

我們可以做PARAMS [:控制器一旦點擊該鏈接後,但我要如何命名路由查找控制器名稱.. –

-1

params哈希總是包含:controller:action鍵,你可以試試這個

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

我們可以做PARAMS [:控制器一旦點擊該鏈接後,卻怎麼我是否從指定路線中找到控制器名稱... –

0

ActionDispatch ::路由:: RouteSet#recognize_path

這可能有所幫助。這將給出路徑映射到哪個控制器的動作。

0
Rails.application.routes.recognize_path('/my_path') 
相關問題