validates_inclusion_of disabling

Yeah, no answers in 4 hours! Rails must suck!

I don't know what you are trying to do. Are you trying to turn off
conditions based on a particular condition? I.E. "If a user submits
from form A then validate, if a user submits from form B then don't
validate" ?

http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M000940

That link will tell you how to set up a :if statement on a validation.

Basically, the :if should be a string (which will be run through an eval), a function (via it’s symbol name), or a Proc… whichever of the 3 it is, it should return true or false when evaluated.

validates_inclusion_of :test, :if => “:some_field && MyModel.some_static_stuff”
or
validates_inclusion_of :test, :if => :is_migration?

def is_migration?
:some_field && MyModel.some_static_stuff"
end

or even

validates_inclusion_of :test, :if => Proc.new { :some_field && MyModel.some_static_stuff }

If your requirements might change (you might add to or take away from the conditions), you’d be best off going with a function, if it’s VERY simple stuff (like what you have here) and it will never change, use a string. If you need access to the particularly object that the validation is being called on, you can use a proc (or a function) that accepts an argument…

validates_inclusion_of :name, :if => Proc.new { |user| user.should_have_name? }

What is the :objective check in the :if supposed to be doing?
What is the validate_on_mig function doing?

I don’t see you calling the self.perform_validation from anywhere, is it necessary?

The correct validations is:
validates_inclusion_of :objective, :in => Range.new
(Date.today,
Date.new(y=4712)), :if => “:objective && Requirement.validatevalidation
_mig”
,:message => “bla bla bla”

From what I can tell, the correct validation is

validates_inclusion_of :object, :in => Range.new(Date.today, Date.new(y=4712)), :if => “Requirement.perform_validation”, :message => “blah blah blah”

You don’t need to validate the field in the validation test for the field… you’re completely missing the point of the :if statement.

If you absolutely HAVE to have that in there, I would change the :if to
:if => Proc.new { |m| m.objective && Requirement.perform_validation }

I still have absolutely no clue where that whole validatevalidation_mig stuff is coming from… but I’m pretty sure what I said is what you’re looking for.

You’re welcome :slight_smile: