On Tue, Feb 9, 2010 at 4:03 PM, Ichiro Saga <li...@ruby-forum.com> wrote:

> Hi, there.
> I have two validations in the model:
>
> validates_numericality_of :value, :only_integer=>true,
> :allow_blank=>true
> validates_size_of :value, :is=>9, :message=>"must be 5-digit number",
> :if=>Proc.new{|u| u.value.is_a?(Numeric)}
>
>
Ichiro, you have a bit of duplication within your validates_*.  For example,
you're
testing whether or not :value is numeric within both validates_* methods.
 Next, the
:is compares the number of bytes and not the number of characters you should
be
able to do the following:

  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


> 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.
>
> Any help will be appreciated.
> --
> Posted via http://www.ruby-forum.com/.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To post to this group, send email to rubyonrails-t...@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-talk+unsubscr...@googlegroups.com<rubyonrails-talk%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/rubyonrails-talk?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to