Programmatically copying ActiveModel validators from one model to another?

I’m writing a library that will require programmatically copying
validations from one model to another, but I’m stumped on how to pull
this
off.

I have a model that is an ActiveModel::Model with some validation:

class User < ActiveRecord::Base
  validates :name, presence: true
end

And another model that I’d like to have the same validations:

class UserForm
  include ActiveModel::Model
  attr_accessor :name
end

Now I’d like to give UserForm the same validations as User, and
without
modifying User. Copying the validators over doesn’t work, because
ActiveModel::Validations hooks into callbacks during the validation
check:

UserForm._validators = User._validators
UserForm.new.valid?
# => true             # We wanted to see `false` here, but no

validations
# are actually running because the :validate
callback
# is empty.

Unfortunately, there doesn’t seem to be an easy way that I can see to
programmatically give one model another’s validation callbacks and still
have it work. I think my best bet is if I can ask Rails to regenerate
the
validation callbacks based on the validators that are present at a given
moment in time.

Is that possible? If not, is there a better way to do this?

Why don’t you try creating a concern and decorate the class with that
concern that contains the validations?

you can have a look here:
http://stackoverflow.com/questions/11372484/rails-put-validation-in-a-module-mixin
and
here:
http://blog.andywaite.com/2012/12/23/exploring-concerns-for-rails-4/

does this needs to be done in run time?

hope it helps.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs