有沒有辦法爲我的應用程序創建約定?我想在我的routes.rb
中執行類似get '*/:id' => '*Controller#GET'
的操作,以便確定任何GET請求都將由控制器文件夾中與名稱組合匹配的類中的GET方法處理。對於所有其他HTTP動詞...Rails Rails_API寶石約定代
我現在的問題是,即時規劃一個REST API,將有幾十個控制器,我不想維護一個巨大的路由文件...根據我的計算,如果我不能這樣做,那麼在我的路線中只有第一個版本的API會有超過400個條目...
有沒有辦法爲我的應用程序創建約定?我想在我的routes.rb
中執行類似get '*/:id' => '*Controller#GET'
的操作,以便確定任何GET請求都將由控制器文件夾中與名稱組合匹配的類中的GET方法處理。對於所有其他HTTP動詞...Rails Rails_API寶石約定代
我現在的問題是,即時規劃一個REST API,將有幾十個控制器,我不想維護一個巨大的路由文件...根據我的計算,如果我不能這樣做,那麼在我的路線中只有第一個版本的API會有超過400個條目...
既然您事先知道資源,在routes.rb
中嚴格定義端點。假設您要將資源foo
和foobar
定義到其各自的控制器。添加以下內容:
['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
加載它們。
您是否事先知道控制器的名稱? – brito
好吧...是的,我做... – Leonardo
另外:你看過[通配符]官方文檔(http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments)嗎? – brito