modelの共通のvalidationをまとめる便利なconcerns

railsのDRYの原則に基づくのなら、modelのvalidationに共通ができてしまったら、共通化したいですね。

そんな時に便利なのがconcernsです。

app/models/concerns

こんなフォルダがあると思います。

ここに記述していきます

使い方

例えば、PostモデルとCommentモデルのカラムにbodyというのがあったとします。

これのvalidationが同じだとします。

app/models/concerns/body_validators.rb

module BodyValidators
  extend ActiveSupport::Concern

  included do
    validates :body, presence: true,
                     length: { maximum: 200 }
  end
end

app/models/post.rb

class Post < ActiveRecord::Base
  include BodyValidators
end

app/models/comment.rb

class Comment < ActiveRecord::Base
  include BodyValidators
end

これで両方共同じvalidationになりました。

まとめ

concernsには、メソッドもかけます。

同じような処理を行っていたら、まとめていきましょう。