Rails:仅当路由存在时才链接到

时间:2015-11-24 21:51:25

标签: ruby-on-rails

我正在编写Rails引擎,在我的一个视图中,如果存在命名路由,我想创建一个指向main_app的链接。

我将举一个例子来澄清这个问题: 主应用程序可能会或可能不会在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如何?方法可以实施吗?我使用ruby 2.2和rails 4.2

问题与:Determine if path exists as route in Rails controller有关 但是在这种情况下,我有一个命名路线(my_resource_path),所以我需要一些略有不同的东西,但我自己也找不到。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我找到了一个不需要从失败中恢复的解决方案。可以使用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) %>