はじめに
サイトページが多くなるにつれて、同じコントローラーの記述が増えてくるかと思います。
そのときに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