2015-11-17 89 views
0

在Ruby on Rails中是否有一種方法可以獲取與給定路徑相對應的控制器命令的字符串?例如,給定路線在Ruby on Rails中訪問控制器命令給定路徑

get 'add_address' => 'locations#new' 

代碼:

puts add_address_path.some_method 

將輸出

'locations#new' 
+0

正在發送some_method相關對這個問題? –

+0

我正在尋找「some_method」,它將從路線中提取控制器路徑 –

回答

0

路線是相當不錯封裝在路徑的文件,我不知道你會如何去發送一條消息到一個以路由命名的對象來提取控制器和操作。

如果你打開一個選擇,你可以嘗試像這樣的東西撬出來:

class MyRouteParser < Struct.new(:named_route) 

    include Rails.application.routes.url_helpers 

    def controller 
    @parsed[:controller] 
    end 

    def action 
    @parsed[:action] 
    end 

    def controller_with_action 
    "#{controller}\##{action}" 
    end 

    private 

    def parse 
    @parsed ||= Rails.application.routes.recognize_path(named_route) 
    end 
end 

這將提供你想要的字符串:

route = MyRouteParser.new("add_address_path") 
route.controller_with_action 

"locations#new" 
+0

我非常欣賞響應,但我在實施時遇到了一些麻煩。我假設我應該把這個類放在一個.rb文件中,但我不知道它應該放在哪裏。我試着把它與模型放在一起,但是我運行的所有「require」方法都給我錯誤「無法加載這樣的文件」。有什麼建議麼? –

+0

你可以把它放在models目錄下。只要確保它是按照Rails約定來命名的,在這個例子中這個約定是my_route_parser.rb。它應該自動加載並且運行沒有問題。 –

+0

另外,我收到一個錯誤「undefined method'full_path'」。建議? –