Как создать настраиваемые помощники маршрутов для использования в routes.rb
У меня есть несколько повторяющихся шаблонов на моих маршрутах .rb, и я хотел бы сделать это DRY, создав метод, который создает для меня эти маршруты.
Пример того, что я хочу выполнить, можно увидеть в камне Devise, где вы можете использовать следующий синтаксис:
#routes.rb
devise_for :users
Будет создано все маршруты, необходимые для разработки. Я хотел бы создать нечто подобное. Скажем, например, что у меня есть следующие маршруты:
resources :posts do
member do
get 'new_file'
post 'add_file'
end
match 'files/:id' => 'posts#destroy_file', :via => :delete, :as => :destroy_file
end
resources :articles do
member do
get 'new_file'
post 'add_file'
end
match 'files/:id' => 'articles#destroy_file', :via => :delete, :as => :destroy_file
end
Это начинает быстро запутываться, поэтому я хотел бы найти способ сделать это следующим образом:
resources_with_files :posts
resources_with_files :articles
Итак, мой вопрос: как я могу создать метод resources_with_files?
Ответы
Ответ 1
Поместите это в нечто вроде lib/routes_helper.rb:
class ActionDispatch::Routing::Mapper
def resources_with_files(*resources)
resources.each do |r|
Rails.application.routes.draw do
resources r do
member do
get 'new_file'
post 'add_file'
delete 'files' => :destroy_file
end
end
end
end
end
end
и требуйте его в config/routes.rb