プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】モデルの状態を自動制御する「コールバック」、「フィルタ(Fi…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Ruby on Rails】モデルの状態を自動制御する「コールバック」、「フィルタ(Filter)」について

11.30

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

コールバックとは?

Railsのモデルには登録処理や削除処理等がありますがそのような処理の前後に任意の処理を挟むことができることです。JavaScriptでも引数として関数を渡して任意のタイミングで実行してもらうコールバックという仕組みがありますがプログラミングでは一般的な用語になっています。

モデルオブジェクトのライフサイクル

モデルオブジェクトのライフサイクルは「登録処理」、「更新処理」、「削除処理」によってそれぞれ分かれます。

登録処理の場合

モデルの登録処理をする場合は下記のようなライフサイクルに分かれておりそれぞれの工程の前後でコールバックメソッドを実行できます。

  • 1.モデルオブジェクトをnewする。
  • 2.検証する。
  • 3.登録する。

1.モデルオブジェクトをnewする。

after_initialize

2.検証する。

before_validation

検証前に値を正規化する場合に使ったりします。

after_validation

検証後に検証結果のエラーメッセージを加工するために使います。

3.登録する。

before_save

データ保存前にバックエンドで行いたい処理をします。(主にユーザーがエラーを見てもどうにもできない異常を防ぐための処理です。)

before_create

データ保存前にバックエンドで行いたい処理をします。(主にユーザーがエラーを見てもどうにもできない異常を防ぐための処理です。)

around_save

around_create

after_save

モデル状態に応じて他のモデルの状態も変えたい場合に記述する処理です。また、ユーザーがエラーを見てもどうにもできない異常を防ぐための処理も記述します。

after_create

モデル状態に応じて他のモデルの状態も変えたい場合に記述する処理です。また、ユーザーがエラーを見てもどうにもできない異常を防ぐための処理も記述します。

「更新処理」の場合

モデルの更新処理をする場合は下記のようなライフサイクルに分かれておりそれぞれの工程の前後でコールバックメソッドを実行できます。

  • 1.対象のモデルオブジェクトを検索する。
  • 2.検証する。
  • 3.登録する。

1.対象のモデルオブジェクトを検索する。

after_find

after_initialize

2.検証する。

before_validation

検証前に値を正規化する場合に使ったりします。

after_validation

検証後に検証結果のエラーメッセージを加工するために使います。

3.更新する。

before_save

データ保存前にバックエンドで行いたい処理をします。(主にユーザーがエラーを見てもどうにもできない異常を防ぐための処理です。)

before_update

データ保存前にバックエンドで行いたい処理をします。(主にユーザーがエラーを見てもどうにもできない異常を防ぐための処理です。)

around_save

around_update

after_save

モデル状態に応じて他のモデルの状態も変えたい場合に記述する処理です。また、ユーザーがエラーを見てもどうにもできない異常を防ぐための処理も記述します。

after_update

モデル状態に応じて他のモデルの状態も変えたい場合に記述する処理です。また、ユーザーがエラーを見てもどうにもできない異常を防ぐための処理も記述します。

「削除処理」の場合

モデルの削除処理をする場合は下記のようなライフサイクルに分かれておりそれぞれの工程の前後でコールバックメソッドを実行できます。

  • 1.対象のモデルオブジェクトを検索する。
  • 2.削除する。

対象のモデルオブジェクトを検索する。

after_find

after_initialize

削除する。

before_destroy

削除がOKか確認しダメな場合は例外を出力します。

around_destroy

after_destroy

モデルの削除に応じて他のモデルも削除するかどうか等の処理を記述します。

フィルタ(Filter)とは?

Railsのコントローラの機能でアクションで処理をする前後で任意の処理を挟むことです。

コールバックとの使い分けは?

アクションの前後で処理を追加できる機能としてはコールバックがあると思います。コールバックの前処理で例えばリダイレクトとかをしてしまうとそのアクションは絶対に処理が行われない形になってしまいます。特定の状況だけでもアクションを実行できるようにする目的でよく使われるのがこのフィルタ(Filter)という機能なのです。

実装方法

フィルタとしてメソッドを登録して、実際にメソッドを実装するというやり方で追加をします。全機能共通の機能のフィルタを実装する場合はApplicationControllerに実装することが一般的です。

before_action

アクションの前に呼ばれるフィルタのことです。

onlyオプション

フィルタを適用するアクションを指定することができます。

skip_before_action

特定のアクションだけはフィルタを通らないようにすることがデイます。

スポンサーリンク
  • 2019 11.30
  • miyabisan2
  • コメントを書く
  • Ruby on Rails
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 11.17

    【Ruby】日付や時刻を扱うクラス

  2. 2020 10.13

    【Ruby on Rails】「pundit」について

  3. 2019 12.08

    【Ruby on Rails】「seedデータ」、「faker」

  4. 2020 11.02

    【Ruby on Rails】「Redis」の基本、Railsへの導入

  5. 2022 09.04

    【Rails】「ロードパス」、「Zeitwerk」について

  6. 2019 12.08

    【Ruby on Rails】バージョンアップ対策

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Web開発】ユーザー管理機能の設計や実装、認証設計の…

【Ruby on Rails】モデル同士を関連づけを便…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー