1. コントローラ(Controllers)
app/controllers/
:リクエストの処理とモデル・ビューの連携を担う。
例1: 基本的なCRUDアクション
class UsersController < ApplicationController
def index
@users = User.all
end
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to @user
else
render :new
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update(user_params)
redirect_to @user
else
render :edit
end
end
def destroy
@user = User.find(params[:id])
@user.destroy
redirect_to users_path
end
private
def user_params
params.require(:user).permit(:name, :email)
end
end
例2: 非同期リクエストを処理するAjax対応アクション
def toggle_active
@user = User.find(params[:id])
@user.update(active: !@user.active)
respond_to do |format|
format.html { redirect_to users_path }
format.js # toggle_active.js.erbを呼び出す
end
end
2. モデル(Models)
app/models/
:データベースとのやりとりを定義する。
例1: バリデーション
class User < ApplicationRecord
validates :name, presence: true
validates :email, presence: true, uniqueness: true
end
例2: コールバック
class User < ApplicationRecord
before_save :capitalize_name
private
def capitalize_name
self.name = name.capitalize
end
end
3. ビュー(Views)
app/views/
:ユーザーにデータを表示する。
例1: 部分テンプレート
app/views/users/_user.html.erb
:
<li><%= user.name %> - <%= user.email %></li>
app/views/users/index.html.erb
:
<h1>Users List</h1>
<ul>
<%= render @users %> <!-- 部分テンプレートの呼び出し -->
</ul>
例2: Ajaxでの部分更新
app/views/users/toggle_active.js.erb
:
$("#user_<%= @user.id %>").toggleClass("active");
4. ルーティング設定(Routes)
config/routes.rb
:ルーティングの定義。
例1: 基本的なRESTfulルート
Rails.application.routes.draw do
resources :users
end
例2: カスタムアクション
Rails.application.routes.draw do
resources :users do
member do
patch :toggle_active
end
end
end
5. マイグレーション(Migrations)
db/migrate/
:データベースの構造を管理。
例1: カラム追加のマイグレーション
rails generate migration AddAgeToUsers age:integer
生成されるファイル:
class AddAgeToUsers < ActiveRecord::Migration[6.0]
def change
add_column :users, :age, :integer
end
end
例2: インデックスの追加
rails generate migration AddIndexToUsersEmail
生成されるファイル:
class AddIndexToUsersEmail < ActiveRecord::Migration[6.0]
def change
add_index :users, :email, unique: true
end
end
7. 設定ファイル(Configurations)
config/
:環境ごとの設定を管理。
例1: ログレベルの設定
# config/environments/development.rb
Rails.application.configure do
config.log_level = :debug
end
例2: キャッシュ設定
# config/environments/production.rb
Rails.application.configure do
config.cache_store = :memory_store, { size: 64.megabytes }
end
9. ヘルパー(Helpers)
app/helpers/
:ビューで共通的に利用するメソッドを定義する。
例1: 日付のフォーマット
module UsersHelper
def formatted_date(date)
date.strftime("%Y年%m月%d日")
end
end
例2: ステータスの表示
module UsersHelper
def user_status(user)
user.active? ? "Active" : "Inactive"
end
end
13. Gemfile
プロジェクトルート:Gemの依存関係を管理する。
例1: 開発環境と本番環境で異なるGem
group :development do
gem 'pry'
end
group :production do
gem 'pg'
end
例2: 特定バージョンを指定
gem 'rails', '~> 6.1.4'
gem 'devise', '~> 4.7'