2014-12-13 85 views
0

我正在使用Rails API(Rails 4.2.0.beta4),並且由於客戶端將負責生成新的和編輯窗體,我的RESTful控制器將會只需要5個動作。而不必做這樣的事情:限制所有的寧靜路線,不重複每個資源聲明

resources :media, except: [:new, :edit] 
resources :media_collections, except: [:new, :edit] 
etc... 

有一些方法我可以定義我所有的塊內部資源已except: [:new, :edit]在一個地方或某事說?似乎瘋狂必須附加到以往的資源申報,對不對?

回答

1

您可以創建一個抽象的方法。我將爲此創造一個新的模塊,並使用extend使可用的方法在routes.rb中

module ApiResource 
    def api_resources(name, options = {}, &block) 
    resources name, options.merge({:except => [:new, :edit]}, &block) 
    end 
end 

# in routes.rb: 

MyApp::Application.routes.draw do 
    extend ApiResource 

    api_resources :media 
    api_resources :media_collections 

    # ... 

end 
+0

真棒,我喜歡的實現,謝謝! – mackshkatz 2014-12-14 05:25:11

+0

我只會補充一點,就是給選項參數一個空的散列的默認值。 – mackshkatz 2014-12-14 06:43:10

+0

好主意,更新答案以供將來參考 – Slicedpan 2014-12-15 11:27:18