检查Ruby on Rails中是否存在来自对象的路径

时间:2015-12-28 20:59:39

标签: ruby-on-rails ruby activerecord

我正在创建一个用于在活动管理中呈现列表的类,我希望这样做,给定任何对象:

类ListGenerator     def初始化(array_of_objects)       @objects = array_of_objects       generate_list     端

def generate_list
  ul do
    @objects.each do |object|
      if has_show_path_for(object)
        li link_to object.name, polymorphic_path([:admin, object]
      else
        li object.name
      end
    end          
  end
end

这只是一个解释这个想法的示例代码。如何创建has_show_path_for方法?使用polymorphic_path并且路径存在时,它将返回路径。但如果它不存在,则返回nomethod错误。

关于如何动态检查路径是否存在的任何想法?

2 个答案:

答案 0 :(得分:3)

有url帮助器来确定路径是否实际定义

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

但是,这可能会有问题,因为您似乎正在检查多态路径。使用简单的开始/救援可以很好地解决这个问题。

def generate_list
    ul do
       @objects.each do |object|
           begin
               li link_to object.name, polymorphic_path([:admin, object])
           rescue NoMethodError
               li object.name
           end
    end          
end

或更短的版本......

def generate_list
    ul do
       @objects.each do |object|
           li link_to(object.name, polymorphic_path([:admin, object])) rescue object.name
    end          
end

答案 1 :(得分:0)

将polymorphic_path包装在begin/rescue块中。如果你到达rescue部分,你知道没有这样的路径。因此:

def generate_list
    ul do
       @objects.each do |object|
           begin
               p = polymorphic_path([:admin, object])
               li link_to object.name, p
           rescue NoMethodError
               li object.name
           end
        end
    end          
end