LoginSignup
14
12

More than 3 years have passed since last update.

【Ruby on Rails】コントローラー間で共通処理(concerns使用)

Posted at

はじめに

サイトページが多くなるにつれて、同じコントローラーの記述が増えてくるかと思います。
そのときにconcernsを活用すると記述もスッキリとなり、可読性が上がります。

実際のコード

app/controllers/posts_controller.rb
class PostController < ApplicationController
  before_action :set_posts
  def set_posts
    @posts = Post.all
  end
end
app/controllers/users_controller.rb
class UserController < ApplicationController
  before_action :set_posts
  def set_posts
    @posts = Post.all
  end
end

上記のように同じset_postsという共通処理があります。
ただし、もし変更があった場合は両方を修正する必要があり手間です。
これらを解決する方法がconcernsの利用です。

concernsファイルの作成

app/controllers/concerns配下にファイルを作成します。
今回ファイル名は「postable.rb」にします。

app/controllers/concerns/postable.rb
module Postables
extend ActiveSupport::Concern

  def set_posts
    @posts = Post.all
  end

end

そしれそれぞれのコントローラー呼び出すためには
include Postablesと記述します。

app/controllers/posts_controller.rb
class PostController < ApplicationController
  include Postables
  before_action :set_posts
end
app/controllers/users_controller.rb
class UserController < ApplicationController
  include Postables
  before_action :set_posts
end

これでOKです。

まとめ

これらを行うことで修正があったとしても一箇所の修正で済み、エラー時にも早急に対応できます。
記述の少なさは保守性にもつながりますので、使用することをおすすめします。

またtwitterではQiitaにはアップしていない技術や考え方もアップしていますので、
よければフォローして頂けると嬉しいです。
詳しくはこちら https://twitter.com/japwork

14
12
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
14
12