Rails:确定对象是否具有命名路由

时间:2012-06-19 08:13:37

标签: ruby-on-rails ruby-on-rails-3 routing inflection

在Rails 3.1应用程序中,我想列出一堆变量类的对象(来自多态表),我事先并不知道。对于那些具有命名路由的资源,我想在link_to调用中使用该路由。天真的方法,而不检查是否存在这样的路线(原谅HAML):

%ul
- @objects.each do |object|
  %li= link_to object, url_for(object)

如果对象是没有命名路由的类undefined method 'foo_path'的实例(例如因为它未定义为资源),则会引发Foo错误。是否有一种简单的方法(例如简单的方法调用)来确定对象或类的命名路由的存在?

编辑:

我想得到的是这样的:

%ul
- @objects.each do |object|
  %li= link_to_if object.has_route?, object, url_for(object)

2 个答案:

答案 0 :(得分:3)

如果您不希望生成没有命名路由的模型对象或为它们输出一些错误消息,您可以在link_to调用中添加一个救援

%ul
- @objects.each do |object|
  %li= (link_to(object, url_for(object)) rescue "no link")

希望这有帮助。

答案 1 :(得分:2)

看着完全相同的问题。出于同样的原因,我不喜欢救援。我在想

respond_to?(object.class.name.underscore + "_path")

这需要根据嵌套,子域和STI进行修改;例如,为了我的目的,我有:

respond_to?("ops_media_file_#{asset.class.base_class.name.underscore}_path")

这看起来效果很好。

相关问题