2015-11-24 58 views
0

我在寫一個Rails引擎,並且在我的一個視圖中,我想創建一個指向main_app的鏈接(如果存在命名路由)。Rails:link_to只有在路由存在的情況下

我舉一個例子來闡明這個問題: 主應用程序可能會或可能不會在routes.rb中定義:

resources :my_resource, only: :index 

在我的rails引擎,我需要添加一個鏈接只有到my_resource_path main_app定義該路線。我認爲它應該是這樣的:

<%= link_to "Link", main_app.my_path if my_resource_path_exists? %> 

我想:

<%= link_to "Link", main_app.my_resource_path if 
     main_app.respond_to?(:my_resource_path) %> 

但是,當路徑不存在,即提高NoMethodError:

undefined method `my_resource_path' for #<Module> 

如何my_resource_path_exists?方法可以執行?我使用的紅寶石2.2和4.2軌道

的問題是關於:Determine if path exists as route in Rails controller 但在這種情況下,我有一個名爲路線(my_resource_path),所以我需要的東西略有不同,但不能由我自己弄清楚。

+0

的[確定是否路徑路線的Rails控制器存在]可能的複製( http://stackoverflow.com/questions/3273715/determine-if-path-exists-as-route-in-rails-controller) –

+0

我只是編輯問題來解釋差異 –

回答

0

我發現了一個解決方案,它不需要從失敗中恢復。這是可能的檢查路線定義使用url_helpers:

Rails.application.routes.url_helpers.method_defined?(:my_path) 

所以,代碼可以寫成這樣:

<%= link_to "Link", main_app.my_resource_path if 
     Rails.application.routes.url_helpers.method_defined?(:my_resource_path) %> 
+0

我喜歡使用'Rails.application.routes.url_helpers.respond_to?(:what_i_want_to_check_path)' – microspino

1

您可以使用main_app.try(:my_path)或拯救NoMethodError返回false。

+0

現在的問題是:如何檢查路徑是否定義?我正在編寫一個可掛載引擎,並且想要可選地添加一個鏈接到main_app,如果main_app想要的話。 –

+0

嘗試嘗試調用:my_path,如何使用此來檢查路由是否已定義?從失敗中拯救是可能的,但我將不得不編寫助手方法。我發現我可以使用:Rails.application.routes.url_helpers.method_defined? :my_path –

相關問題