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.
Thanks much,
Michael
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.