Rails Rails_API Gem约定生成

时间:2016-01-21 19:46:48

标签: ruby-on-rails ruby rails-api

有没有办法为我的应用创建约定?我想在get '*/:id' => '*Controller#GET'中执行类似routes.rb的操作,以确定任何GET请求将由控制器文件夹中与名称组成匹配的类中的GET方法处理...

我也会为所有其他HTTP动词做到这一点......

我现在的问题是,我计划一个REST API,它将拥有数十个控制器而我不想维护一个巨大的路径文件...根据我的计算,如果我不能得到这样,我的路线中将有超过400个条目仅用于API的第一个版本......

1 个答案:

答案 0 :(得分: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文件中)并将它们加载到{{1 }}