ActiveSupport::Concernとは
Modelやcontrollerで重複した処理をActiveSupport::Concernを使用することでよりDRYに記述できる機能
使用するには
-
app/models/concerns/
orapp/controllers/concerns/
にファイルを作成- ファイル名はmoduleと同じにする
-
included do end
の中に処理を書く- スコープだけでなく、メソッドを定義したりもできます
-
extend ActiveSupport::Concern
を忘れないように
- 使用したいmodelファイルの中でincludedする
- concernに追加したメソッドを使用する際はそのまま呼び出せます
例
app/models/concerns/m.rb
module M
extend ActiveSupport::Concern
included do
scope :disabled, -> { where(disabled: true) }
end
end
class Host
include M
end
終わりに
Module#concerning
とごっちゃになってしまったのでまとめてみました。
近々Module#concerning
についての記事も書きます。
内部での動きは理解していないので調べてみて今度編集します。
参考