Как предотвратить генератор контроллера 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
. Как я могу предотвратить это?
Ответы
Ответ 1
Как и в случае с Rails 4.2, можно отключить создание маршрута с помощью следующего кода в приложении application.rb:
config.generators do |g|
g.skip_routes true
end
Источник: https://github.com/rails/rails/commit/4b173b8ed90cb409c1cdfb922914b41b5e212cb6
Ответ 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
вы можете поместить его в инициализатор и попробовать.
Ответ 3
непроверенных...
config.generators do |g|
g.resource_route false
end
https://github.com/rails/rails/blob/master/railties/lib/rails/generators.rb
Ответ 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
Ответ 6
Создайте свой собственный генератор! Следующая ссылка поможет:
http://guides.rubyonrails.org/generators.html
Ответ 7
Это счетчик интуитивно понятен, но вот что он ищет:
config.generators do |g|
g.skip_routes true
end