Как предотвратить генератор контроллера Rails для изменения config/routes.rb

Иногда я запускаю команду типа 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. Как я могу предотвратить это?

Ответ 2

Похоже, что генерация маршрутов жестко запрограммирована. Взгляните на этот метод 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

вы можете поместить его в инициализатор и попробовать.

Ответ 4

Поскольку вы хотите, чтобы это конкретное приложение не создавало маршруты.

Вы можете развернуть свои камни в локальную/проектную папку и переопределить их.

В папке проекта 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 в вашей системе.

Ответ 5

Если вы хотите избежать активов или помощников для всех контроллеров, вы можете написать следующие строки в 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

Ответ 7

Это счетчик интуитивно понятен, но вот что он ищет:

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