Validates_each, how to set options?

Hi

I wrote the following validation in my model (using Rails 2.1)

validates_each :checker :do |record, attr, value|
record.errors.add attr, :existing_checkin_out if value == 0
end , :on => :update, :if => :checker_required?

obviously I got an error as I don’t know where to write the :on
and :if options … (I also tried many other way …)

1- how can I write them in validates_each ?

2- is there any better validation procedure, on UPDATE only, for
this ‘checker’ field (value is 0 or 1)

if the field is updated to 0 (changing the status to non-checker…)
I want to add an error
ONLY when checker state 1 is still mandatory (checker_required? =>
true)
(some planned or confirmed checkins or checkouts instances are still
depending upon this user)

here is my checker_required? proc

protected
def checker_required?
checks = self.checkins + self.checkouts
return false if checks.empty?
checks.map {|c| c[:id] if c.planned? ||
c.confirmed? }.compact.empty? ? false : true
end

thanks for your lights …

On 14 Aug 2008, at 13:45, Erwin wrote:

and :if options … (I also tried many other way …)

1- how can I write them in validates_each ?

2- is there any better validation procedure, on UPDATE only, for
this ‘checker’ field (value is 0 or 1)

You could make things a lot easier with

def validate_on_update
errors.add … if checker == 0 && checker_required?
end

Fred

Thanks Fred

I knew I was far from being right… you made my day

On 14 août, 15:04, Frederick C. [email protected]

To still answer your original question about where to put the options
if you were to use that validation one day:
validates_each :attribute, :some_other_attribute, :on => :update, :if
=> :some_proc_to_check do |record, attr, value|
record.errors.add “message”, some_check
end

Makes only sense to use validates_each if you have more than one
attribute to validate in the block.

Dirk.