我正在编写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),所以我需要一些略有不同的东西,但我自己也找不到。
答案 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) %>