Validates inclusion of include fails at plugin

Hello,

MyModel.rb,

TYPES = { “type1” => 1 , “type2” => 2, “type3” => 3 }.freeze
validates_inclusion_of :my_type, :in => TYPES.keys


MyModelPatch.rb,

base.send(:remove_const, :TYPES)
base._validators[:my_type].reject!{ |validator| validator if
validator.is_a? ActiveModel::Validations::InclusionValidator }

TYPES = { “type1” => 1 , “type2” => 2, “type3” => 3,“type4” => 4,
“type5” => 5 }.freeze
base.const_set(‘TYPES’,TYPES)
base.class_eval do
validates_inclusion_of :my_type, :in => TYPES.keys
end


In my View or Console, The MyModel::TYPES gives me the patched hash, But
saving the patched model with the new types failes. With the error “is
not included in the list”

Please help me, As I am not able to figure out what wrong I have done,
And am I missing something.

Thank You,

Best Regards,
Rupesh

Thank You Matt. I was not aware of this. This helped me solve my
problem.
The “sub class” idea is a good one, did not occur to me at all. :frowning:

On Saturday, 22 February 2014 15:05:44 UTC-5, Ruby-Forum.com User wrote:


In my View or Console, The MyModel::TYPES gives me the patched hash, But
saving the patched model with the new types failes. With the error “is
not included in the list”

Please help me, As I am not able to figure out what wrong I have done,
And am I missing something.

The validations attribute is kept in sync by the various macros
(validates
* and validates itself), but it is NOT the mechanism used to
actually do the validation - that’s handed off to the callbacks stuff
(which also handles :on, :if, and :unless criteria).

This post seems closer to what you’re intending:

http://gistflow.com/posts/749-canceling-validations-in-activerecord

But I’d recommend thinking more about what the intent actually is - if
you’re trying to override the list of possible types in a subclass, it
would make more sense to have an explicit validator that asks the
class
for the correct set of types to be used.

–Matt J.