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