rails-expert

Rails 7+ specialist optimizing queries, implementing Hotwire real-time features, and background job processing. Covers Active Record query optimization with includes / eager_load to prevent N+1 queries, plus database indexing strategies Implements Turbo Frames and Turbo Streams for partial page updates, and Action Cable configuration for WebSocket-based real-time features Provides Sidekiq worker templates for background job processing with retry logic and error handling Includes RSpec testing patterns for models, requests, and system specs targeting >95% coverage Enforces strong parameters, service objects for business logic, and comprehensive migration workflows

INSTALLATION
npx skills add https://github.com/jeffallan/claude-skills --skill rails-expert
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

$2c

Topic

Reference

Load When

Hotwire/Turbo

references/hotwire-turbo.md

Turbo Frames, Streams, Stimulus controllers

Active Record

references/active-record.md

Models, associations, queries, performance

Background Jobs

references/background-jobs.md

Sidekiq, job design, queues, error handling

Testing

references/rspec-testing.md

Model/request/system specs, factories

API Development

references/api-development.md

API-only mode, serialization, authentication

Common Patterns

N+1 Prevention with includes/eager_load

# BAD — triggers N+1

posts = Post.all

posts.each { |post| puts post.author.name }

# GOOD — eager load association

posts = Post.includes(:author).all

posts.each { |post| puts post.author.name }

# GOOD — eager_load forces a JOIN (useful when filtering on association)

posts = Post.eager_load(:author).where(authors: { verified: true })

Turbo Frame Setup (partial page update)

<%# app/views/posts/index.html.erb %>

<%= turbo_frame_tag "posts" do %>

  <%= render @posts %>

  <%= link_to "Load More", posts_path(page: @next_page) %>

<% end %>

<%# app/views/posts/_post.html.erb %>

<%= turbo_frame_tag dom_id(post) do %>

  <h2><%= post.title %></h2>

  <%= link_to "Edit", edit_post_path(post) %>

<% end %>
# app/controllers/posts_controller.rb

def index

  @posts = Post.includes(:author).page(params[:page])

  @next_page = @posts.next_page

end

Sidekiq Worker Template

# app/jobs/send_welcome_email_job.rb

class SendWelcomeEmailJob < ApplicationJob

  queue_as :default

  sidekiq_options retry: 3, dead: false

  def perform(user_id)

    user = User.find(user_id)

    UserMailer.welcome(user).deliver_now

  rescue ActiveRecord::RecordNotFound => e

    Rails.logger.warn("SendWelcomeEmailJob: user #{user_id} not found — #{e.message}")

    # Do not re-raise; record is gone, no point retrying

  end

end

# Enqueue from controller or model callback

SendWelcomeEmailJob.perform_later(user.id)

Strong Parameters (controller template)

# app/controllers/posts_controller.rb

class PostsController < ApplicationController

  before_action :set_post, only: %i[show edit update destroy]

  def create

    @post = Post.new(post_params)

    if @post.save

      redirect_to @post, notice: "Post created."

    else

      render :new, status: :unprocessable_entity

    end

  end

  private

  def set_post

    @post = Post.find(params[:id])

  end

  def post_params

    params.require(:post).permit(:title, :body, :published_at)

  end

end

Constraints

MUST DO

  • Prevent N+1 queries with includes/eager_load on every collection query involving associations
  • Write comprehensive specs targeting >95% coverage
  • Use service objects for complex business logic; keep controllers thin
  • Add database indexes for every column used in WHERE, ORDER BY, or JOIN
  • Offload slow operations to Sidekiq — never run them synchronously in a request cycle

MUST NOT DO

  • Skip migrations for schema changes
  • Use raw SQL without sanitization (sanitize_sql or parameterized queries only)
  • Expose internal IDs in URLs without consideration

Output Templates

When implementing Rails features, provide:

  • Migration file (if schema changes needed)
  • Model file with associations and validations
  • Controller with RESTful actions and strong parameters
  • View files or Hotwire setup
  • Spec files for models and requests
  • Brief explanation of architectural decisions

Documentation

BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card