Skip to content


Subversion checkout URL

You can clone with
Download ZIP
a code metric tool for rails projects
Ruby Shell

This branch is 509 commits ahead, 893 commits behind railsbp:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.


Build Status

Click here to lend your support to: and make a donation at !

rails_best_practices is a code metric tool to check the quality of rails codes.

it supports following ORM/ODMs:

  • activerecord
  • mongoid
  • mongomapper

following template engines:

  • erb
  • haml
  • slim


At the root directory of rails app

rails_best_practices .

or html output

rails_best_practices -f html .

By default rails_best_practices will do parse codes in vendor, spec, test and features directories. If you need, see the command options:

$ rails_best_practices -h
Usage: rails_best_practices [options]
    -d, --debug                      Debug mode
    -f, --format FORMAT              output format
        --without-color              only output plain text without color
        --with-textmate              open file by textmate in html format
        --with-mvim                  open file by mvim in html format
        --with-hg                    display hg commit and username, only support html format
        --with-git                   display git commit and username, only support html format
        --template TEMPLATE          customize erb template
        --output-file OUTPUT_FILE    output html file for the analyzing result
        --silent                     silent mode
        --vendor                     include vendor files
        --spec                       include spec files
        --test                       include test files
        --features                   include features files
    -x, --exclude PATTERNS           Don't analyze files matching a pattern
                                     (comma-separated regexp list)
    -g, --generate                   Generate configuration yaml
    -v, --version                    Show this version
    -h, --help                       Show this message





Team Blog

Google Group:


Issue Tracker:


rails_best_practices gem is rewritten based on ripper instead of ruby_parser to support ruby 1.9 new syntax.

Ruby 1.9

gem install rails_best_practices

or add in Gemfile

gem "rails_best_practices"


If you install the rails_best_practices with bundler-installed github-sourced gem, please use the following command instead.

bundle exec rails_best_practices .

If you got NoMethodError or any syntax error, you should use debug mode to detect which file rails_best_practices is parsing and getting the error.

rails_best_practices -d .

Then give me the error stack and the source code of the file that rails_best_practices is parsing error.

Customize Configuration

First run

rails_best_practices -g

to generate rails_best_practices.yml file.

Now you can customize this configuration file, the default configuration is as follows:

MoveFinderToNamedScopeCheck: { }
UseModelAssociationCheck: { }
UseScopeAccessCheck: { }
AddModelVirtualAttributeCheck: { }
ReplaceComplexCreationWithFactoryMethodCheck: { attribute_assignment_count: 2 }
MoveModelLogicIntoModelCheck: { use_count: 4 }
OveruseRouteCustomizationsCheck: { customize_count: 3 }
NeedlessDeepNestingCheck: { nested_count: 2 }
NotUseDefaultRouteCheck: {  }
KeepFindersOnTheirOwnModelCheck: { }
LawOfDemeterCheck: { }
UseObserverCheck: { }
IsolateSeedDataCheck: { }
AlwaysAddDbIndexCheck: { }
UseBeforeFilterCheck: { customize_count: 2 }
MoveCodeIntoControllerCheck: { }
MoveCodeIntoModelCheck: { use_count: 2 }
MoveCodeIntoHelperCheck: { array_count: 3 }
ReplaceInstanceVariableWithLocalVariableCheck: { }
DryBundlerInCapistranoCheck: { }
UseSayWithTimeInMigrationsCheck: { }
UseQueryAttributeCheck: { }
RemoveTrailingWhitespaceCheck: { }
UseMultipartAlternativeAsContentTypeOfEmailCheck: {}
SimplifyRenderInViewsCheck: {}
SimplifyRenderInControllersCheck: {}
RemoveEmptyHelpersCheck: {}
RemoveTabCheck: {}
RestrictAutoGeneratedRoutesCheck: { }
RemoveUnusedMethodsInModelsCheck: { except_methods: [] }
RemoveUnusedMethodsInControllersCheck: { except_methods: [] }
RemoveUnusedMethodsInHelpersCheck: { except_methods: [] }

You can remove or comment one review to disable it, and you can change the options.


Move code from Controller to Model

  1. Move finder to named_scope (rails2 only)
  2. Use model association
  3. Use scope access
  4. Add model virtual attribute
  5. Replace complex creation with factory method
  6. Move model logic into the Model

RESTful Conventions

  1. Overuse route customizations
  2. Needless deep nesting
  3. Not use default route
  4. Restrict auto-generated routes


  1. Keep finders on their own model (rails2 only)
  2. the law of demeter
  3. Use observer
  4. Use query attribute
  5. Remove unused methods in models


  1. Use multipart/alternative as content_type of email


  1. Isolating seed data
  2. Always add db`index
  3. Use say with time in migrations


  1. Use before_filter
  2. Simplify render in controllers
  3. Remove unused methods in controllers


  1. Remove empty helpers
  2. Remove unused methods in helpers


  1. Move code into controller
  2. Move code into model
  3. Move code into helper
  4. Replace instance variable with local variable
  5. Simplify render in views


  1. Dry bundler in capistrano


  1. Remove trailing whitespace
  2. Remove tab

Write Your Own Check List

If you want to write your own check list (some check list only for your rails projects), please read this first, How to write your own check list?


If you want to add your rails best practices into the gem, please post your best practices on

Contact Us

We provide rails consulting services, you can contact us by twitter or email.

Follow us on twitter:

Send us email:

Copyright © 2009 - 2011 Richard Huang (, released under the MIT license

Something went wrong with that request. Please try again.