Search code examples
ruby-on-railsgeneratorscaffolding

Extending scaffold generator


Is there some way, to trigger my own generator after the scaffold generator is done?

Something like rails g scaffold HighScore game:string score:integer will trigger my_generator created by rails generate generator my_generator


Solution

  • excid3

    I solve this in another way.

    Originally my thought was:

    • I run a scaffold generator
    • IT generates all standard files
    • Then it will run my own scripts (generators) after

    You can customize scaffold workflow as the documentation says

    So I defined a scaffold generator like this

    config/application.rb

    # resource_controller defines which generator to use 
    # for generating a controller when using rails generate the resource. 
    # Defaults to :controller.
    
    # scaffold_controller different from resource_controller, defines which generator 
    # to use for generating a scaffolded controller when using rails generate scaffold. 
    # Defaults to :scaffold_controller.
    
    config.generators do |gen|
      gen.orm :active_record
      gen.template_engine :haml
      gen.test_framework :rspec,
                         fixtures: true,
                         view_specs: true,
                         helper_specs: true,
                         routing_specs: true,
                         controller_specs: true,
                         request_specs: true
      gen.helper :helper_and_policy
      gen.scaffold_controller :controller_with_smart_listing
      gen.fixture_replacement :factory_bot, dir: "spec/factories"
    end
    

    As you can see I only changed gen.scaffold_controller which suits to my problem. But I think there is an option for changing a scaffold model generator as well.

    Then I created a folder for my generator lib/generators/rails/controller_with_smart_listing/

    I do not remember how I generate this structure but I share files in a repository