They work as expected except when the :value is character/string like
"a" "abc", the second validation will also output error message "must be
5-digit number". What I want is the second validation displays error
message only when the :value is a number. I think :if=>Proc.new{|u|
u.value.is_a?(Numeric)} would take care of it, but it didn't.
The second problem is about the custom validation. I got a very simple
custom validation. Whenever there is an error, it catches it and shows
the error message. But the field with error is not highlighted. I
checked the source of the page, the "fieldwitherror" was not generated
on the field checked by the custom validation. I tried the
validation_reflection plugin. It catched the error but there's no error
message under the field. Normally that's where the message should be.
I guess they are related but I am not sure what causes it.
validates_size_of :value, :is=>9, :message=>"must be 5-digit number",
:if=>Proc.new{|u| u.value.is_a?(Numeric)}
Looks corrent to me. Maybe the name of the field "value" is causing a
conflict somewhere. Try to rename the field to something else just to
test.
Thanks Sharagoz. I tried different names for the field but none of
those worked.
I just wrote a custom validation to workaround it although still can't
figure it out.
validates_numericality_of :value, :only_integer => true, :allow_blank
=>
true # make sure that it's an integer
validate :number_of_digits
# make sure that we have five digits
private
def number_of_digits
unless self.value.to_s.size == 5
errors.add :value, "should be 5 digits"
end
end
Good luck,
-Conrad
Hi, Conrad. Thank you for the explanation. My workaround looks similar
to your code and works. I still have no clue why :if=>Proc.new{...}
didn't work though.