AI Workflows for Rails

AI assistants can accelerate Rails development when used effectively.

Purpose

AI assistants can accelerate Rails development when used effectively.

This document provides prompt patterns and workflows for using AI assistants in common Rails development tasks: model generation, API development, testing, debugging and refactoring.

Workflows

Model and Migration Generation

Purpose

Use AI to generate models and migrations from descriptions.

Prompt Pattern

Generate a Rails model and migration for:

Model: Product
Fields:
- name: string (required)
- sku: string (required, unique)
- description: text (optional)
- price: decimal (precision: 10, scale: 2)
- category: references (Category)
- active: boolean (default: true)

Validations:
- name must be present.
- sku must be present and unique.
- price must be greater than 0.

Associations:
- belongs_to :category
- has_many :order_items

Also generate the factory and model spec.

API Endpoint Development

Purpose

Use AI to generate API endpoints with request specs.

Prompt Pattern

Generate a Rails API controller and routes for:

Resource: Products (API::V1::ProductsController)
Actions: index, show, create, update, destroy

Requirements:
- index supports pagination (page, per_page).
- index supports filtering by category_id.
- show returns a single product with category name included.
- create requires authentication.
- Responses use JSON format with the following structure:
  { data: { id:, type:, attributes: {} }, errors: [] }

Also generate the request specs.

Test Generation

Purpose

Use AI to generate tests for existing code.

Prompt Pattern

Write RSpec tests for this Rails service object:

```ruby
class InviteUser
  def initialize(team:, email:, inviter:)
    @team = team
    @email = email
    @inviter = inviter
  end

  def call
    user = User.find_or_create_by!(email: @email)
    membership = @team.memberships.create!(user: user, inviter: @inviter)
    UserMailer.invitation(membership).deliver_later
    membership
  rescue ActiveRecord::RecordInvalid => e
    raise InvitationError, e.message
  end
end
```

Include tests for:
- Successful invitation.
- Duplicate email handling.
- Invalid team.
- Mailer delivery.

Debugging

Purpose

Use AI to diagnose Rails errors.

Prompt Pattern

I am getting this error in my Rails application:

[error message and stack trace]

Code context:
```ruby
[relevant code]
```

Rails version: [version]
Ruby version: [version]

What is the most likely cause and how should I fix it?

Refactoring

Purpose

Use AI to suggest Rails-specific refactorings.

Prompt Pattern

Help me refactor this Rails controller:

```ruby
class OrdersController < ApplicationController
  def create
    @order = Order.new(order_params)
    @order.user = current_user
    @order.status = "pending"

    if @order.save
      InventoryService.deduct_stock(@order)
      PaymentService.charge(@order)
      OrderMailer.confirmation(@order).deliver_later
      redirect_to @order, notice: "Order created."
    else
      render :new, status: :unprocessable_entity
    end
  end
end
```

Goals:
- Extract business logic into a service object.
- Keep error handling consistent.
- Improve testability.

Anti-patterns

Rails-Specific Blind Spots

AI may suggest patterns that are not idiomatic Rails or that ignore Rails conventions. Always verify that AI suggestions follow Rails conventions.

Over-Abstraction

AI may suggest extracting classes and modules where a simpler Rails approach would suffice. Prefer Rails conventions unless there is a clear reason to deviate.

Ignoring Performance

AI-generated queries may introduce N+1 problems or inefficient queries. Always review generated database access code.

Related Documents