IT技術にまつわる実験ノート

「長編を書くより、短編を数多く完成させてください。それが上達への近道です」 by 手塚治虫

Rails で included メソッドを使ってみる

説明

f:id:matt-note:20190323195827p:plain

 

使ってみる

ざっくりとアプリを作成する。

  • rails new included_sample
  • cd included_sample

 

サンプル用に Article モデルを scaffold で作成する。

  • bin/rails g scaffold Article title:string body:text
  • bin/rails g db:migrate

 

ここではコントローラの concerns ディレクトリを使うことにする。

controllers/concerns ディレクトリ内にモジュールを定義するファイルを作成する。

f:id:matt-note:20190323202049p:plain

 

Hoge モジュールを定義する。

モジュール内で ActiveSupport::Concern を extend して、included { block } とすると、Hoge モジュールをインクルードした時に実行する処理を記述することができる。ここでは単純に文字列を出力することにする。この時に、ブロック内で before_action メソッドを記述しておくと、ApplicationController での記述を削減できる。(ApplicationController で before_action を記述しなくてよくなる。)

f:id:matt-note:20190618153154p:plain

 

ApplicationController で Hoge モジュールをインクルードする。before_action は記述せずに、モジュールの include だけを記述すれば良くなる。

f:id:matt-note:20190323203525p:plain

 

サーバーを起動して /articles にアクセスしてみる。

f:id:matt-note:20190323203639p:plain

-> included メソッドで定義した処理を出力できた。included メソッド内の before_action で指定したメソッドも実行できた。

 

まとめ

  • concerns ディレクトリ内のモジュールで included メソッドを使うと、モジュールがインクルードされた時に自動的に実行する処理を記述できる。
  • これで処理が複雑になりがちなコントローラの記述をシンプルにすることができる。

 

参考