我的routes.rb中有一些重复出现的模式,我希望通过创建一个为我创建这些路径的方法来使其干掉。
我想要完成的一个例子可以在Devise gem中看到,你可以使用以下语法:
#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方法?
答案 0 :(得分: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
并在config / routes.rb
中要求它