value_to_boolean(value), does not always return a boolean value, only
when true.
150: def value_to_boolean(value)
151: if value.is_a?(String) && value.blank?
152: nil
153: else
154: TRUE_VALUES.include?(value)
155: end
156: end
If value is contained in TRUE_VALUES then it returns true(TrueClass).
But if value is anything else it returns nil(NilClass) instead of
false(FalseClass)
This does not seem consistent or expected to me since false <> nil.
Since we have TRUE_VALUES and FALSE_VALUES, I think it should be
something like this.
150 def value_to_boolean(value)
151 if TRUE_VALUES.include?(value)
152 true
153 elsif FALSE_VALUES.include?(value)
154 false
155 else
156 nil
157 end
158 end
On Sep 2, 9:21 pm, powertoaster [email protected] wrote:
If value is contained in TRUE_VALUES then it returns true(TrueClass).
But if value is anything else it returns nil(NilClass) instead of
false(FalseClass)
This does not seem consistent or expected to me since false <> nil.
Since we have TRUE_VALUES and FALSE_VALUES, I think it should be
something like this.
The code as it is ensures that if the column contains NULL then you
get nil out. 3 way true/false/unset logic can be a little odd but I’m
not sure whether it should just be completely supressed.
It might also be misleading in that foo.flag == false leads you to
believe that Foo.find_all_by_flag(false) would return that row, which
it wouldn’t if the flag is NULL. If you don’t like NULLs in boolean
columns, then make it a non null column (which i usually do)
Fred