在自定义生成器中生成嵌套路由

时间:2009-06-05 16:06:31

标签: ruby-on-rails code-generation routes generator

我在rails中构建一个生成器,生成前端和管理控制器,然后将路由添加到routes文件中。我可以让前端使用它:

m.route_resources controller_file_name

但我无法弄清楚如何对嵌套管理路由(admin / controller_file_name)执行相同的操作。有谁知道如何生成这些路线?

1 个答案:

答案 0 :(得分:3)

查看route_resources的代码,看起来它不会像沼泽标准map.resources :foos那样做任何事情。

相反,让我们编写自己的方法来处理这个问题,基于原始的

def route_namespaced_resources(namespace, *resources)
  resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
  sentinel = 'ActionController::Routing::Routes.draw do |map|'
  logger.route "#{namespace}.resources #{resource_list}"
  unless options[:pretend]
    gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
      "#{match}\n  map.namespace(:#{namespace}) do |#{namespace}|\n     #{namespace}.resources #{resource_list}\n  end\n"
    end
  end
end

我们可以在您的生成器中将其作为本地方法启动,您现在可以调用它:

m.route_namespaced_resources :admin, controller_file_name