【Ruby】ActiveRecordのAssociationにメソッドを追加する
ActiveRecordのhas_many
とかbelongs_to
とかのAssociationはブロックを渡してメソッドを追加することができます。
class User has_many :blogs do # ステータスがopenのものを取得する def open where(status: 'open') end end end
こんな感じで、ブロックの内部で関数を定義するとその関数をメソッドチェーンで実行できるようになります。
User.first.blogs.open
複数のモデルで使い回したい処理がある場合は、moduleにまとめてextendオプションでメソッドを追加することも可能です。
module Common def open where(status: 'open') end end
class User has_many :blogs, extend: Common end
配列にして、複数のmoduleも渡せます。
class User has_many :blogs, extend: [Common, Common2] end
便利ー!!