Hi Michael.

Thanks for replying.

Michael Koziarski <[email protected]> writes:

>> In general I find it confusing that my validation takes place after
>> the column_specific type cast. I would rather have a validation
>> message when my boolean field is set to "some arbitraty text" instead
>> of letting it be swallowed by some fall_back value in
>> ActiveRecord::ConnectionAdapters::Column::value_to_boolean.
>>
>> In general I find it confusing and not clearly documented that
>> validations occur after the type_cast mechanism (is that true for
>> all types? also times/dates?)
>
> Yeah, it happens for all types otherwise you couldn't do something like this:
>
> validates_inclusion_of :price, :in=>0..500

I see. However it is unclear which validates_* macros that validates the raw
value and which that validates the type_casted value.

> Form submission values are all strings and "30" wouldn't pass that
> validation if it were done before typecasting.  Similarly your
> validation wouldn't work with check_box_tag.

Well, this is exactly my problem, the current implementation does not
work with the suggested validation for booleans:

The current suggested way to validate booleans is
  validates_inclusion_of :balloon, :in => [true, false] 

But that does NOT work, providing "something else" as parameter to
:balloon passes the validation, becauase it is converted to false
before the validates_inclusion_of

So for all boolean fields I must write sometning like this:
  validates_each(:balloon) do |record,attr_name,value|
    raw_value = record.send("#{attr_name}_before_type_cast")
    unless 
ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES.union(ActiveRecord::ConnectionAdapters::Column::FALSE_VALUES).member?
 raw_value
      record.errors.add(attr_name, :inclusion, :default => "is not a boolean 
value", :value => raw_value)
    end
  end

I am quite surprised that I am the only/first one having this problem,
boolean values can't be that rare. I didn't do anything special, just
introduced a boolean field, and added some tests like (using shoulda):

  should_allow_values_for :balloon, true, false
  should_not_allow_values_for :balloon, nil, '', 'any ohter value'

And then the problem showed up.

Jarl

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-core?hl=en.

Reply via email to