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には、メソッドもかけます。
同じような処理を行っていたら、まとめていきましょう。