Concernとは
結論から言いますと、コントローラーの重複した記述を防ぐための、拡張機能です。
アプリ作成が続くと、コントローラーの記述が増え、重複した記述になりがちです。
そこでConcernを利用してまとめていきましょう。
やり方
1. controller/concerns
ディレクトリにファイルを作る。今回はcommon_actions.rb
と名前をつけます。
2. controllerで重複した記述を見つける
controller/post_as_controller.rb
#省略
def update
if @post.update(post_params)
redirect_to user_url(current_user)
else
render :edit
end
end
#省略
controller/post_bs_controller.rb
#省略
def update
if @post.update(post_params)
redirect_to user_url(current_user)
else
render :edit
end
end
#省略
3. common_actions.rb
に共通処理を記述する
controller/concerns/common_actions.rb
module CommonActions #moduleを定義する
#これを記述することで、インクルード先で、クラスメソッドも使用することができる。今回の場合はあっても無くてもOK
extend ActiveSupport::Concern
#以下に共通内容を記述
def post_update
if @post.update(post_params)
redirect_to user_url(current_user), notice: 'お気に入りを編集しました'
else
render :edit
end
end
end
4. 元のファイルから共通処理を消し、モジュールをincludeする
controller/post_as_controller.rb
#モジュールをincludeする
include CommonActions
#ここから
def update
post_update #includeしたインスタンスメソッドを使用
end
#ここまで
controller/post_bs_controller.rb
#モジュールをincludeする
include CommonActions
#ここから
def update
post_update #includeしたインスタンスメソッドを使用
end
#ここまで
5. おわりです
まとめ
今までコントローラーに重複した記述を書いて可読性が低くなっていましたが、まとめることで読みやすくなりました。
この記事でもっと知りたい!と思った方は、下記の記事に詳しく載っておりますのでご参照ください。
ActiveSupport::Concernの使い方としくみ
最後まで読んで頂きありがとうございました。