0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】Concernでコントローラーの重複した記述をまとめる

Last updated at Posted at 2020-12-05

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の使い方としくみ

最後まで読んで頂きありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?