Переопределение генератора эскадронов по умолчанию в рельсах 3

Я создал генератор для контроллера в рельсах 3. Теперь я хочу использовать этот генератор в качестве генератора по умолчанию при использовании генератора лесов.

Возможно ли это?

Ответы

Ответ 1

Правильная позиция для вашего настроенного файла контроллера lib/templates/rails/scaffold_controller/controller.rb

Ответ 2

Если вы просто хотите использовать свой собственный шаблон контроллера, вы можете просто поместить его в lib/templates/rails/scaffold_controller/controller.rb

Если вы хотите заменить сам код scaffold_controller_generator, например, так, чтобы накладные файлы контроллера генерировали дополнительные файлы классов. вы можете создать lib/generators/rails/my_scaffold_controller/my_scaffold_controller_generator.rb с шаблонами в lib/generators/rails/my_scaffold_controller/templates.

Не забудьте указать рельсы на новом элементе управления scaffold_controller в config/application.rb:

config.generators do |g|
  g.scaffold_controller = "my_scaffold_controller"
end

Для my_scaffold_controller_generator.rb вы можете скопировать из драгоценного камня railties под railties-3.x.x/lib/rails/generators/rails/scaffold_controller, если вы хотите изменить поведение по умолчанию или наследовать его, если хотите просто добавить функциональность:

require 'rails/generators/rails/scaffold_controller/scaffold_controller_generator'

module Rails
  module Generators
    class MyScaffoldControllerGenerator < ScaffoldControllerGenerator
      source_root File.expand_path("../templates", __FILE__)

      def new_funtionality
      end

    end
  end
end

Ответ 3

Вы можете переопределить шаблоны, которые Rails использует для своих генераторов. В этом случае просто поместите файл в lib/templates/scaffold_controller/controller.rb и измените его, как хотите. При следующем запуске rails g scaffold [modelName] он подберет этот новый шаблон контроллера и будет использовать его.

Это описано в в разделе 6 руководства по созданию и настройке Rails-генераторов.

Ответ 4

Похоже, что это немного изменилось с Rails 4. Вы можете увидеть, какой шаблон будет искать генератор в строке вызова при создании эшафот, а ваше имя папки шаблона должно соответствовать этому:

rails generate scaffold blub 
...
invoke  responders_controller

Если вы используете рельсы g scaffold_controller blubs, расположение шаблона должно быть:

lib/templates/rails/scaffold_controller/controller.rb

Если вы используете рельсы g scaffold blub, расположение шаблона должно быть:

lib/templates/rails/responders_controller/controller.rb

Ответ 5

Если кто-то задается вопросом, почему это не работает в установке Rails по умолчанию, это потому, что jbuilder вставляет себя в путь шаблона до места переопределения. Мне не нужен jbuilder, поэтому я удалил его, но я также сообщил о проблеме в Github. Надеюсь, скоро это будет исправлено.