validates_numercality_of with allow_nil.

In the model I have:

validates :square_meters_public_land, :barrier_meters, :numericality => { :greater_than_or_equal_to => 0 }, :allow_nil => true

but if, in the field, on create, I don't insert a value I have the error "field is not a number".

Depending on your Rails version.... try:

  validates :square_meters_public_land, :barrier_meters, :numericality => { :greater_than_or_equal_to => 0 }, :if => Proc.new {|o| !o.square_meters_public_land.blank?}

or

  validates :square_meters_public_land, :barrier_meters, :numericality => { :greater_than_or_equal_to => 0 }, :if => :square_meters_public_land

Include the :allow_blank option if the fields are not required. I generally think about this in terms of "specifying a validation always includes :required; if that's not what I want, I have to include :allow_blank".

cheers, Bill

I'm using rails 3.0.9, sorry but I don't undestand why I have to use the if clause. allow_nil => doens't work with validation_numericality_of?

I didn't say you "had to", I suggested you try it... did you? Did it work?...

I doubt it anyway, as I had copied your code without checking it, and just added the "if" I'd copied from one of my models. I notice now that you're not using "validates_numericality_of", you're using "validates" and seem to be trying to check two values - can't say that's an idiom I'm familiar with, but it may be valid (although I can't see it in the docs: http://ar.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M000091)

What about:

validates_numericality_of :square_meters_public_land, :greater_than_or_equal_to => 0, :allow_nil => true validates_numericality_of :barrier_meters, :greater_than_or_equal_to => 0, :allow_nil => true

It's just the same.

Same problem, I don't know how to insert nil values for the two fields.

Curious. Okay, so lastly, try:

validates_numericality_of :square_meters_public_land, :greater_than_or_equal_to => 0, :if => :square_meters_public_land validates_numericality_of :barrier_meters, :greater_than_or_equal_to => 0, :if => :barrier_meters

That's ok, they are numeric fields I thought that allow_nil should be ok.

I would have expected :allow_nil to work, but apparently it's giving problems? FWIW, I always tend to think in terms of :allow_blank rather than :allow_nil. Perhaps an artifact of my years in Smalltalk? If :allow_nil isn't working, as I gather from the posts that appeared before mine (after I posted, but long before mine showed up), have you tried :allow_blank? Does that work better, worse, or no different?

regards, Bill

allow_blank works.