2016-01-21 4 views
-1

Есть ли способ создать соглашение для моего приложения? Я хотел бы сделать что-то вроде get '*/:id' => '*Controller#GET' в моем routes.rb, чтобы установить, что любой запрос GET будет обработан методом GET в классе в папке контроллеров, который соответствует составу имен ...Rails Rails_API Генерация условных обозначений Gem

Я бы тоже сделал что для всех остальных HTTP-глаголов ...

Моя проблема прямо сейчас в том, что я планирую REST API, который будет иметь десятки контроллеров, и я не хочу поддерживать огромный файл маршрутов ... согласно моим расчетам, если я не могу этого добиться, на моих маршрутах будет только более 400 записей только для первой версии API ...

+0

Вы знаете заранее названия контроллеров? – brito

+0

хорошо ... да я делаю ... – Leonardo

+0

Также: прочитал ли вы официальный документ по [подстановочным знакам] (http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments)? – brito

ответ

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 файл) и загрузить их в routes.rb.