如何防止Rails控制器生成器修改config / routes.rb
有时我运行一个像rails g controller foo index
这样的命令来生成控制器和模板的骨架。
因为我不想为每个控制器提供帮助程序和资产,所以我将以下代码放入config/application.rb
:
config.generators做| g | g.helper false g.assets false 结束
还有一件事我不想发生。 生成器在我的config/routes.rb
添加一行get "foo/index"
。 我该怎样预防呢?
从Rails 4.2开始,可以使用application.rb中的以下代码禁用路由生成:
config.generators do |g| g.skip_routes true end
资料来源: https : //github.com/rails/rails/commit/4b173b8ed90cb409c1cdfb922914b41b5e212cb6
看起来路由生成是硬编码的。 看看这个方法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
你可以把它放到初始化器并尝试。
未经测试…
config.generators do |g| g.resource_route false end
https://github.com/rails/rails/blob/master/railties/lib/rails/generators.rb
由于您希望此特定应用程序不生成路由。
您可以将gems部署到本地/项目文件夹并覆盖它们 。
在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应用程序
如果要避免所有控制器的资产或帮助程序,则可以在application.rb中编写以下行
config.generators.stylesheets = false config.generators.javascripts = false config.generators.helper = false
但是如果想要避免任何1个控制器那么你就像这样生成控制器
rails g controller test --no_assets rails g controller test --no_helper rails g controller test --no_javascripts rails g controller test --no_stylesheets
创建自己的发电机! 以下链接将有助于:
这是违反直觉的,但这是你正在寻找的:
config.generators do |g| g.skip_routes true end