ActiveSupport::Concern
参考:
ActiveSupport::Concern の存在理由 – Qiita
ActiveSupport::Concern とは – Qiita
ActiveSupport::Concern でハッピーなモジュールライフを送る| TECHSCORE BLOG
Model (Active Record) の Concern | 酒と涙とRubyとRailsと
ActiveSupport::Concern | Ruby on Rails API [Official]
rails/concern.rb at 5-2-stable · rails/rails – GitHub
使い方
参考:
共通部分を切り出す (View, Controller, Model) メモ – Qiita
Rails で ActiveSupport::Concern を使って、複数のコントローラで共通のモジュールを使う方法 | Sky Grid
Rails で concerns を使えば、application_controller.rb を汚さずに共通化できる | 経理からエンジニア転向した人のメモ
How to use concerns in Rails 4 – Stack Overflow
class_methods / ClassMethods
参考:
Rails 4.2 からは module ClassMethods ではなく Concern#class_methods を使おう | yuji.developer’s graffiti blog
Rails の module ClassMethods がやっている事 – Qiita
included ブロック
モジュールが include
された時に、対象のモジュール (もしくはクラス) をレシーバーとして class_eval
で評価されるブロックを定義する。
module M extend ActiveSupport::Concern this = self included do |base| puts "#{this} is included in #{base}" puts "#{self} is #{base}" end end class A; end A.include M # prints: # M is included in A # A is A
参考:
included – ActiveSupport::Concern | Ruby on Rails API [Official]
included do end block – Stack Overflow
scope を定義する
参考:
scope を ActiveSupport::Concern に分割する – Qiita
Concerns に切り出した module のなかで ActiveRecord の Scope を使う方法 – Qiita
Shared scopes via module? – Stack Overflow
attr_accessor をオーバーライドする
参考:
How do I override an attr_accessor getter from a module? – Stack Overflow
prepend に対応させる
参考:
prepend されたときにクラスメソッドとインスタンスメソッドを同時に追加するパターン | ttanimichi’s blog
ActiveSupport::Concern support Module#prepend? – Google グループ
複数の included ブロック定義
複数の included
ブロックを定義するとエラーが発生する。
Cannot define multiple 'included' blocks for a Concern
参考:
ActiveSupport::Concern and Rails.config.cache_classes · Issue #15767 · rails/rails – GitHub