Rails 3,为每个资源创建一个新路由

时间:2011-03-09 13:46:40

标签: ruby-on-rails-3 routes

在我正在开发的项目中,我想为多个资源添加相同的路径。我知道我可以做到这一点

resources :one do
  collection do
    post 'common_action'
  end
end
resources :two do
  collection do
    post 'common_action'
  end
end  

我至少有10种不同的资源都需要相同的路径,因为每个控制器都有相同的动作。有没有办法更少重复地定义它?

3 个答案:

答案 0 :(得分:6)

更好的方式和支持rails 3.2

require 'action_dispatch/routing/mapper'
module ActionDispatch::Routing::Mapper::Resources
  alias_method :resources_without_search, :resources

  def resources(*args, &block)
    resources_without_search *args do
      collection do
        match :search, action: "index"
      end
      yield if block_given?
    end
  end
end

答案 1 :(得分:2)

您可以扩展路由类:

class ActionDispatch::Routing
    def extended_resources *args
        resources *args do
            collection do
                post 'common_action'
            end
        end
    end
end

...::Application.routes.draw do
    extended_resources :one
    extended_resources :two
end

或者,您甚至可以重新定义resources方法本身。

注意:我不确定ActionDispatch :: Routing是否是正确的类名。

答案 2 :(得分:1)

  %w(one two three four etc).each do |r|
    resources r do
      collection do
        post 'common_action'
      end
    end
  end