有没有办法为我的应用创建约定?我想在get '*/:id' => '*Controller#GET'
中执行类似routes.rb
的操作,以确定任何GET请求将由控制器文件夹中与名称组成匹配的类中的GET方法处理...
我也会为所有其他HTTP动词做到这一点......
我现在的问题是,我计划一个REST API,它将拥有数十个控制器而我不想维护一个巨大的路径文件...根据我的计算,如果我不能得到这样,我的路线中将有超过400个条目仅用于API的第一个版本......
答案 0 :(得分:0)
由于您事先知道资源,因此可以在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
文件中)并将它们加载到{{1 }}