Как я могу создать собственные помощники маршрутов для использования в rout.rb - PullRequest
15 голосов
/ 16 июня 2011

У меня есть несколько повторяющихся шаблонов в моем rout.rb, и я хотел бы сделать его СУХИМ, создав для меня метод, который создает эти маршруты.

Можно увидеть пример того, чего я хочу достичьв геме Devise вы можете использовать следующий синтаксис:

#routes.rb
devise_for :users

, который сгенерирует все маршруты, необходимые для Devise.Я хотел бы создать нечто подобное.Скажем, например, что у меня есть следующие маршруты:

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 Ответ

12 голосов
/ 16 июня 2011

Поместите это в что-то вроде lib / rout_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 / rout.rb

...