concernsディレクトリについて[Rails]

コードリーディングをしていると、今まで自分でrailsを使うときには使ったことの無い、concernsというディレクトリがcontrollers配下やmodels配下にあって、その中のファイルにメソッドを定義していっている事が多々ありました。

そこで今回、concernsディレクトリについてよくわかっていなかった為、調べてみることにしました。

 

concernsディレクトリとは?

concerns とは、Mix-in 用のモジュールを置くディレクトリです。modelやcontrollerで使いたい機能をmodule化して共通で使えるようにしたい時に使います。

コントローラー間での共通処理を切り出したいときには、app/controllers/concernsを設定し、その中に共通処理を書いたファイルを入れてあげます。

モデル間での共通処理を切り出したいときには、app/models/concernsを設定し、その中に共通処理を書いたファイルを入れます。

 

使い方

以下のように、Mix-inするモジュール側で、ActiveSupportの機能を使いたい場合は、

extend ActiveSupport::Concernを呼び出します。

app/model/member.rb

class Member

  include Human

end

 

app/model/concerns/human.rb

module Human

  extend ActiveSupport::Concern

 

  included do

    attr_accessor :name

    def self.default_name

      "花子"

    end

 

    def default_name?

      name == self.class.default_name

    end

  end

end

 

ActiveSupport::Cncernとは?

ActiveSupport::Concernとは、Railsにおいて共通した処理を切り出すために使われる機能です。

Mix-inでも処理を切り出す事ができますが、ActiveSupport::Concernを使うと、Mix-inの複雑な記述を省略する事ができます。