如何防止Rails控制器生成器修改config / routes.rb

时间:2014-01-01 09:51:10

标签: ruby-on-rails ruby generator

有时我运行像rails g controller foo index这样的命令来为控制器和模板生成骨架。

因为我不想为每个控制器提供帮助和资产,所以我将以下代码放入config/application.rb

config.generators do |g|
  g.helper false
  g.assets false
end

还有一件事我不想发生。生成器向get "foo/index"添加一行config/routes.rb。我该如何预防?

7 个答案:

答案 0 :(得分:14)

从Rails 4.2开始,可以使用application.rb中的以下代码禁用路由生成.rb:

config.generators do |g|
  g.skip_routes  true
end

来源:https://github.com/rails/rails/commit/4b173b8ed90cb409c1cdfb922914b41b5e212cb6

答案 1 :(得分:4)

看起来路由生成是硬编码的。看看这个方法 https://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/controller/controller_generator.rb#L12

我认为,最简单的方法是使用monkey-patch覆盖。像

这样的东西
module Rails
  module Generators
    class ControllerGenerator < NamedBase 
      def add_routes
        #do nothing...
      end
    end
  end
end

你可以把它放到初始化器中试试。

答案 2 :(得分:3)

未经测试...

config.generators do |g|
  g.resource_route false
end

https://github.com/rails/rails/blob/master/railties/lib/rails/generators.rb

答案 3 :(得分:3)

因为您希望此特定应用程序不生成路由。

您可以将您的宝石部署到本地/项目文件夹并覆盖它们

在rails项目文件夹中

bundle install --path /my_rails_path/lib/

现在,您可以看到移植到项目lib/文件夹

的所有库

转到以下文件(路径更改取决于您的版本)

lib/ruby/1.9.1/gems/railties-3.2.15/lib/rails/generators/rails/controller/controller_generator.rb

并评论函数add_routes

  def add_routes
    #actions.reverse.each do |action|
    #  route %{get "#{file_name}/#{action}"}
    #end
  end

注意:此技巧不会影响系统中的任何其他rails应用程序

答案 4 :(得分:2)

如果您想避免所有控制器的资产或帮助程序,那么您可以在application.rb中编写以下行。

config.generators.stylesheets = false
config.generators.javascripts = false
config.generators.helper = false

但是如果想要避免任何一个控制器,那么你就像这样生成控制器

rails g controller test --no_assets
rails g controller test --no_helper
rails g controller test --no_javascripts
rails g controller test --no_stylesheets

答案 5 :(得分:1)

创建自己的发电机!以下链接将有所帮助:

http://guides.rubyonrails.org/generators.html

答案 6 :(得分:1)

这是违反直觉的,但这是你正在寻找的:

config.generators do |g|
  g.skip_routes true
end