我正在创建一个用于在活动管理中呈现列表的类,我希望这样做,给定任何对象:
类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错误。
关于如何动态检查路径是否存在的任何想法?
答案 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