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の複雑な記述を省略する事ができます。