2014-12-13 2 views
0

Я работаю над Rails API (Rails 4.2.0.beta4), и, в свою очередь, поскольку клиент будет отвечать за создание новых и редактируемых форм, мои контроллеры RESTful требуется всего 5 действий. Вместо того, чтобы сделать что-то вроде этого:Ограничить все остаточные маршруты без повторения для каждого объявления ресурса

resources :media, except: [:new, :edit] 
resources :media_collections, except: [:new, :edit] 
etc... 

Есть ли какой-то способ, которым я мог бы определить все свои ресурсы внутри блока, который except: [:new, :edit] заявил в одном месте или что-то? Кажется сумасшедшим, чтобы добавить это к объявлению ресурса, не так ли?

ответ

1

Вы можете создать метод, который абстрагирует это. Я хотел бы создать новый модуль для этого, и использовать extend сделать доступные методы в routes.rb

module ApiResource 
    def api_resources(name, options = {}, &block) 
    resources name, options.merge({:except => [:new, :edit]}, &block) 
    end 
end 

# in routes.rb: 

MyApp::Application.routes.draw do 
    extend ApiResource 

    api_resources :media 
    api_resources :media_collections 

    # ... 

end 
+0

Awesome, мне нравится осуществление, спасибо! – mackshkatz

+0

Единственное, что я хотел бы добавить, это дать аргументу options значение по умолчанию для пустого хеша. – mackshkatz

+0

Хорошая идея, обновление ответа для дальнейшего использования – Slicedpan

Смежные вопросы