Railsのconcernsについて
モデルやらコントローラーでmixinすることで定義を分割するような仕組みみたいなのらしい。要はコントローラーやらモデルやらにずらーっと定義しなくてもconcernsに定義をする事でinlcudeして利用できる
共通性があるような処理等においてはconcerns内のモジュールでメソッドを定義し利用する側でincludeするだけ
app/models/entry.rb
class Entry < ActiveRecord::Base
include Hoge
end
Hogeをincludeしているので、app/models/concerns/hoge.rbを作る
app/models/concerns/hoge.rb
module Hoge
extend ActiveSupport::Concern
included do |base|
base.extend ClassMethods
end
module ClassMethods
def one
find(1)
end
end
end
っていう感じでinclude元に対してメソッド生やしたりとか出来るっていう感じかと
test/models/entry_test.rb
require "test_helper"
class EntryTest < ActiveSupport::TestCase
test "the truth" do
entry = Entry.one
assert_not_nil entry
assert_equal entry.id, 1
end
end
上記でEntryクラスでinclude HogeしてHogeでoneメソッド(クラスメソッド)を生やしてるのでEntry.oneで結果が返ってきてそれを検証している感じ
てな感じだけど、コントローラー(app/controllers)にもconcernsディレクトリがあるのでコントローラーも同様みたいな事すれば良いだけっぽい。
以上。concernsを使う事に関しては色々な見解がある模様だし調べてみてもあんまり採用しているようなケースを見受けられないけど、まぁそういう物だよっていう知識として持ってても良いかと