Open2
Railsに関する知見・捉え方

DHHはどのようにRailsのコントローラを書くのか | POSTD
内容
- コントローラはデフォルトのCRUDアクションのみ(index,new,create,show,edit,update,destroy)を使うべきという考え方
- 複雑であってもresourcesのネストを使って表現できないか考えてみましょう
自分のアプリで考えると...
- 通常のindexアクションと自分の投稿を取得するためのmypageアクションをPostコントローラの中に定義している
app/controllers/posts_controller.rb
#...
class PostsController < ApplicationController
def index
@posts = Post.includes(:user).order(created_at: :desc
end
#...
def myposts
@posts = Post.includes(:user).where(user_id: current_user.id).order(created_at: :desc)
end
#...
end
- これをPostsControllerの下にマイページ用のコントローラを作る
app/controllers/posts/mypages_controller.rb
class Posts::MypagesController < ApplicationController
def index
@posts = Post.includes(:user).where(user_id: current_user.id).order(created_at: :desc)
end
end
紹介元
- 「コードレビューで学ぶRuby on Rails 第二版」3.1(記事自体は古いが書籍は2024年のもの)
関連している記事

lib/
配下に置くもの
Railsで概要
- Google Cloud Vision APIを使用した不適切画像の判定実装時、下記資料を参考にした
- 【Rails】Google Cloud Vision APIで不適切な画像をバリデーションしてみた #Ruby - Qiita
- 【Rails】Vision AIを使用して不適切な画像を投稿させない機能をつくる
- どちらの記事もあまり使用したことのない、
lib/
ディレクトリ配下に判定ロジックを実装しており何故だろうかと疑問に感じたため
lib
ディレクトリについて
lib/ アプリケーションで使う拡張モジュールが置かれます。
複数のアプリケーション間で共有するライブラリ用のディレクトリ。
アプリケーションに関するファイルはapp以下に置くので、それ以外の汎用的な処理があれば置いておくらしい。
引用元:Ruby on Railsのディレクトリ構成とファイルの役割 | チュートリアル学びまとめ #Rails - Qiita
lib/ 複数のアプリケーション間で共有するライブラリ用のディレクトリ
- アプリ独自の機能ではなく、他のアプリでも共通で使える機能を置いておく場所というイメージっぽい
libディレクトリの使い方
- 通常の設定だと読み込まれないので、
config.autoload_lib(ignore:)
を設定して読み込むよう設定する必要がある( Rails 7.1でlibディレクトリを自動読み込みするデフォルトプラクティスが決まった #Rails7.1 - Qiita)
共通の処理をかける系(今回は関係ないが思い出したので思い出したので)
- コントローラ:app/controllers/concerns
- モデル:app/controllers/concerns