Here’s a proof of concept plugin that will monkeypatch Rails or Merb routing to allow you to define “acts as blocks” anywhere throughout your application (i.e. a plugin) and then use them in your routes file.

Imagine the plugin acts_as_commentable defines the following in its init.rb:

ActionController::Routing.routes_for_acts_as(:commentable) do |map|
  map.resources :comments
  map.best_comment '/best-comment', :controller => 'comments', :action => 'best'
end

If you added these :acts_as to your config/routes.rb:

ActionController::Routing::Routes.draw do |map|

  map.resources :people, :acts_as => [:commentable]

  map.resources :posts, :acts_as => [:commentable]

end

You could then use these routes throughout your application:

  <%=person_comments_path(Person.first)%>

  <%=post_comments_path(Post.first)%>

  <%=person_best_comment_path(Person.first)%>

This is equivalent to doing:

ActionController::Routing::Routes.draw do |map|

  map.resources :people do |people_map|
    people_map.resources :comments

    people_map.best_comment '/best-comment', :controller => 'comments', :action => 'best'

  end

  map.resources :posts do |posts_map|

    posts_map.resources :comments

    posts_map.best_comment '/best-comment', :controller => 'comments', :action => 'best'

  end

end

The plugin is available on github: http://github.com/hungrymachine/acts_as_routing/tree/master

P.S. At some point, I’ll submit patches to Rails and Merb so this functionality is native rather than provided via a monkeypatching plugin.