如何在routes.rb中创建自定义路由助手以供使用

Dan*_*nne 15 routing ruby-on-rails dry helper ruby-on-rails-3

我的routes.rb中有一些重复出现的模式,我想通过创建一个为我创建这些路径的方法来使其干掉.

我可以在Devise gem中看到我想要完成的一个示例,您可以使用以下语法:

#routes.rb
devise_for :users
Run Code Online (Sandbox Code Playgroud)

这将产生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
Run Code Online (Sandbox Code Playgroud)

这开始变得很乱,所以我想找到一种方法来做这样的事情:

resources_with_files :posts
resources_with_files :articles
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如何创建resources_with_files方法?

chr*_*aly 12

把它放在像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
Run Code Online (Sandbox Code Playgroud)

并在config/routes.rb中要求它