2016-01-21 77 views
-1

有沒有辦法爲我的應用程序創建約定?我想在我的routes.rb中執行類似get '*/:id' => '*Controller#GET'的操作,以便確定任何GET請求都將由控制器文件夾中與名稱組合匹配的類中的GET方法處理。對於所有其他HTTP動詞...Rails Rails_API寶石約定代

我現在的問題是,即時規劃一個REST API,將有幾十個控制器,我不想維護一個巨大的路由文件...根據我的計算,如果我不能這樣做,那麼在我的路線中只有第一個版本的API會有超過400個條目...

+0

您是否事先知道控制器的名稱? – brito

+0

好吧...是的,我做... – Leonardo

+0

另外:你看過[通配符]官方文檔(http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments)嗎? – brito

回答

0

既然您事先知道資源,在routes.rb中嚴格定義端點。假設您要將資源foofoobar定義到其各自的控制器。添加以下內容:

['foo', 'foobar'].each do |resource| 
    resources resource.to_sym, controller: "#{resource}/" 
    end 

將創建相應的路由:

$ rake routes | grep foo 
         foo_index GET /foo(.:format)                    foo/#index 
           POST /foo(.:format)                    foo/#create 
         new_foo GET /foo/new(.:format)                   foo/#new 
         edit_foo GET /foo/:id/edit(.:format)                 foo/#edit 
... 

當然,如果你想有一個特定的動詞,就足以改變resources resource.to_sym, controller: "#{resource}/",比方說,get "#{resource}/:id" => '#{resource}Controller#GET'

既然你提到你將有上百個資源(對比與瑣碎['foo', 'foobar']例子),你甚至可以從外部(例如在YAML文件)定義它們在routes.rb加載它們。