2011-03-09 63 views
1

在我正在開發的一個項目中,我想爲多個資源添加相同的路線。我知道我能做到這一點Rails 3,爲每個資源創建一條新路線

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

我有這都需要同樣的路線,因爲每個控制器將具有相同的作用至少10個不同的資源。有沒有辦法定義這個重複性較低?

回答

1
 
    %w(one two three four etc).each do |r| 
    resources r do 
     collection do 
     post 'common_action' 
     end 
    end 
    end 
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是否是正確的類名。

6

更好的方式和軌道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 
+0

我喜歡這種方法,謝謝支持。 – 2012-09-10 13:53:40