Search code examples
ruby-on-railstemplatesrails-generators

How can I replace the template of the scaffold_controller generator?


When we use the command rails g scaffold Post title content it will generate many files according to some templates located inside railties.

There is even a command that we can copy all templates to our application:

rake app:templates:copy

But there is one template that isn't replaced by it's counterpart inside \lib'. That's scaffold_controller/controller.rb.tt`. I'm trying to search how can I replace this with no luck so far.

So that's my question. How can I change the template that writes the controller when we are scaffolding?


Solution

  • 1. To override controller scaffolding generator use lib/templates/rails/scaffold_controller/controller.rb.tt

    echo 'Overriden for rails g scaffold' > lib/templates/rails/scaffold_controller/controller.rb.tt
    
    rails g scaffold user > /dev/null 2>&1 && cat app/controllers/users_controller.rb
    Overriden for rails g scaffold
    
    rails g scaffold_controller posts > /dev/null 2>&1 && cat app/controllers/posts_controller.rb
    Overriden for rails g scaffold
    

    2. To override controller generator use lib/templates/rails/controller/controller.rb.tt

    echo 'Overriden for rails g controller' > lib/templates/rails/controller/controller.rb.tt
    
    rails g controller books index > /dev/null 2>&1 && cat app/controllers/books_controller.rb
    Overriden for rails g controller