Alex Rivera | Logout

Rails put validation in a module mixin?

Asked 2012-07-07T05:19:58.400
32

Some validations are repetitive in my models:

validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true

How would I put that in a mixin? I get this error if I just put 'em in a mixin

app/models/validations.rb:5: undefined method `validates' for Validations:Module (NoMethodError)
Edit
Report

1 Answer

30

Your module should look something like this:

module CommonValidations
  extend ActiveSupport::Concern

  included do
    validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
    validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
  end
end

Then in your model:

class Post < ActiveRecord::Base
  include CommonValidations

  ...
end

I'm using ActiveSupport::Concern here to make the code a little clearer.

answered 2012-07-07T05:38:23.240

Your Answer