2015-11-24 27 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 –

相关问题