Reduce Application Clutter, Disable Unwanted Rails Generators

Harlow Ward

Disable rails generators

Rails has some handy generators to help streamline the creation of models, views, controllers, and a bunch of other goodies.

~/dev/kitten_factory $ rails g controller Kittens
  create  app/controllers/kittens_controller.rb
  invoke  erb
  create    app/views/kittens
  invoke  helper
  create    app/helpers/kittens_helper.rb
  invoke  assets
  invoke    coffee
  create      app/assets/javascripts/kittens.js.coffee
  invoke    scss
  create      app/assets/stylesheets/kittens.css.scss

Unfortunately, over time the unused files that are created (and not deleted) add clutter to your application.

~/dev/kitten_factory $ wc -l app/helpers/*
       2 app/helpers/allergies_helper.rb
      14 app/helpers/application_helper.rb
       2 app/helpers/invitations_helper.rb
       # lots of unused helper files
       # ...
       2 app/helpers/trainers_helper.rb
       2 app/helpers/vets_helper.rb
     194 total # 178 lines of unused application code

Luckily with a small adjustment to your application environment we can avoid the generation of unnecessary files.

# config/application.rb
module KittenFactory
  class Application < Rails::Application
    # Disable generation of helpers, javascripts, css, and view specs
    config.generators do |generate|
      generate.helper false
      generate.assets false
      generate.view_specs false
    end

    # ...
end

This allow us to tailor the generators to only create the files we need.

~/dev/kitten_factory $ rails g controller Users
      create  app/controllers/users_controller.rb
      invoke  erb
      create    app/views/users
      invoke  assets
      invoke    scss

If you use Suspenders, this and more will be automatically configured for you.

About thoughtbot

We've been helping engineering teams deliver exceptional products for over 20 years. Our designers, developers, and product managers work closely with teams to solve your toughest software challenges through collaborative design and development. Learn more about us.