Rails Best Practices

Comprehensive guide to Rails best practices for clean, maintainable code.

Models

  • Keep models skinny. Business logic belongs in service objects.
  • Use scopes for common queries.
  • Validate data integrity with model validations.
# Example Scope
class User < ApplicationRecord
  scope :active, -> { where(status: 'active') }

  validates :email, presence: true, uniqueness: true
end

Controllers

  • Keep controllers skinny. Delegate complex logic to service objects or helpers.
  • Use strong parameters for mass assignment protection.
# Example Controller
class UsersController < ApplicationController
  def create
    @user = User.new(user_params)

    if @user.save
      redirect_to @user, notice: 'User was successfully created.'
    else
      render :new
    end
  end

  private

  def user_params
    params.require(:user).permit(:email, :password, :name)
  end
end

Views

  • Keep views simple. Avoid embedding logic in views.
  • Use partials for reusable components.
# Example Partial (_user.html.erb)

<%= user.name %>

<%= user.email %>

Routes

  • Use RESTful routes for resourceful controllers.
  • Group related routes with `namespace` and `scope`.
# Example Routes
Rails.application.routes.draw do
  resources :users
  namespace :admin do
    resources :reports
  end
end

Migrations

  • Use descriptive names for migrations.
  • Always include `up` and `down` methods for reversible migrations.
# Example Migration
class CreateUsers < ActiveRecord::Migration[6.1]
  def change
    create_table :users do |t|
      t.string :email, null: false
      t.string :name
      t.timestamps
    end
  end
end

Testing

  • Write unit tests for models and service objects.
  • Write system tests for controllers and views.
# Example RSpec Test
RSpec.describe User, type: :model do
  it { should validate_presence_of(:email) }
end