Ian Harding wrote:> I tend to allow nulls in cases where the value is unknown, even if
> it''s a text/varchar field. RoR seems to push empty strings into
these
> fields. Is there any way to get RoR to use NULL vice ''''
if the input
> box is empty?
>
> Thanks!
>
> - Ian
I just found this problem myself. The workaround I developed was to put
the following into the model object you want this to work for:
before_validation :set_empty_to_nil
def set_empty_to_nil
self.attributes.each {|key, value|
if value.instance_of?(String) and value == ''''
self["#{key}"] = nil
end
}
end
Basically, everytime a create or update is performed, it walks through
all the attributes, and if its type is "String" and is thus empty, I
set
it to nil. (As I write this, I suppose I could have done "...
value.empty?", but anyhoo ...)
Of course, this means you have to put it into _every_ model object you
want this behavior for, so it sort of defeats the DRY principle. There
may be a better solution (callback object?) other than modifying
ActiveRecord, but I''m not sure what that would be. I also
haven''t
looked to see if this was filed as a bug or not.
Of course, part of the reason I did this as part of
"before_validation"
rather than "before_save" was because I wanted to use a
"validates_uniqueness_of" and not have two empty strings declared
equal.
But as it turns out, ActiveRecord won''t allow two NULLs in a database
as
it considers NULL = NULL (even though it specifically performs an "...
IS NULL" search). So it was a bit of a moot point.
I can also see where a person may want '''' saved to the
database rather
than a NULL. I''d just like the option of turning off that behavior.
--
Posted via http://www.ruby-forum.com/.