Something change recently (Oracle upgrade and/or new gem) that's
causing ActiveRecord to give me very unfriendly dates from Oracle.
I believe the old dates I was getting were "YYYY-MM-DD". The ones I'm
getting now are like this:
Tue Dec 23 00:00:00 -0600 2008
Oddly enough, telling my ActiveRecord subclass to fetch "select to_char
(thedate,'YYYY-MM-DD') as thedate" is not working, as I'm still
receiving the very long date listed above.
I found reference to this somewhere online: ALTER SESSION SET
NLS_DATE_FORMAT = 'YYYY-MM-DD'
I have executed that in my app, but subsequent queries are still
returning the long date.
I've found the place where my date/time/datetime is being formatted (I
think); however, changing the format isn't having any effect on
ActiveRecord::Base.to_xml()
activesupport-2.0.2/lib/active_support/core_ext/hash/conversions.rb
line 48
I've tried changing at runtime via the method listed in previous
message, and I've also tried just modifying conversions.rb as a test.
Neither change had any effect on to_xml(). to_xml() insists on making
my dates look like Tue Dec 23 00:00:00 -0600 2008
class Errors < ActiveRecord::Base
def crtd_x
crtd.strftime("%Y-%m-%d")
end
...
end
errs = Errors.find(:all, :conditions => ...)
errs.to_xml(:methods => [:crtd_x, ...])
It fails with a NoMethodError: You have a nil object when you didn't
expect it!
The error occurred while evaluating nil.strftime
If I understand correctly, Errors (a subclass of ActiveRecord::Base)
contains a list of rows, each of which would have a field called
"crtd". But at the level I'm calling to_xml, there is no field
"crtd". What I need for my custom function is something like this
(pseudocode):
def crtd_x
current_error.crtd.strftime("%Y-%m-%d")
end
I think I'm close. Please advise how I can make crtd_x() operate on
the current item in the collection rather than on the whole
collection.