Rob,

Thanks much for the good response.

To answer your question about the data type, it's "date" in Oracle.
When I use the default to_xml() (without suppressing types and the
dasherizer) it looks like this:
<error-date type=\"ActiveRecord::ConnectionAdapters::OracleColumn
\">Wed Nov 12 00:00:00 -0600 2008</error-date>

In fact, every element is listed as "OracleColumn".  I did try the
following to control my date presentation:
      proc = Proc.new {|options| options[:builder].tag!
('error_date_x', options[:object].error_date.strftime("%Y-%m-%d"))}
      s = errs.to_xml(:dasherize => false, :skip_types => true, :procs
=> [proc])
That just blows up.
NoMethodError: You have a nil object when you didn't expect it!
The error occurred while evaluating nil.error_date

What's really odd is I've been using the default to_xml() for months
and receiving "YYYY-MM-DD" as my format.  Now suddenly I'm getting a
different format.  Perhaps I updated gems and got something new...

So now, if I cannot simply control the formatting of that one column,
I'll do my own to_xml() (following your example).

On Jan 9, 11:20 am, Rob Biedenharn <r...@agileconsultingllc.com>
wrote:
> On Jan 9, 2009, at 11:42 AM, michael_teter wrote:
>
>
>
> > Since all my efforts to control how to_xml() is formatting dates has
> > failed, I'm now considering writing my own to_xml().  However, from
> > the limited examples I've found, I just don't understand how to
> > actually reference the columns for the records in my record set.
>
> > Here's a simplified view of my ActiveRecord object:
>
> > class Errors < ActiveRecord::Base
> >  set_table_name "legacy_errors"
>
> >  # legacy_errors has three columns: id, msg, error_date
> >  # Since the default to_xml is generating error_dates in the format
> > "Mon Nov 03 00:00:00 -0600 2008",
> >  #    and I cannot seem to force a different behavior, I want to
> > create my own to_xml.
>
> >  # Examples online show the following as how to override to_xml:
> >    def to_xml(options = {})
> >      options[:indent] ||= 2
> >      xml = options[:builder] ||= Builder::XmlMarkup.new(:indent =>
> > options[:indent])
> >      xml.instruct! unless options[:skip_instruct]
> >      # v v v
> >      xml.level_one do
> >        xml.tag!(:second_level, 'content')
> >      end
> >      # ^ ^ ^
> >    end
> > end
>
> > The code between the v and ^ markers is where the body of each XML
> > object is generated.  If I were generating by hand, I would do
> > something like this:
> > errors.each do |err|
> >  s << "<id>" << err.id << "</id>"
> >  s << "<msg>" << err.msg << "</msg>"
> >  s << "<error_date>" << err.error_date.strftime("%Y-%m-%d") << "</
> > error_date>"
> > end
>
> > I'm not at all understanding how to do my thing within the v ^ section
> > of to_xml().
>
> > Any help is appreciated!
>
> > Thanks.
>
> that should be the encoding of a single Errors instance.
>
>    xml.error do |x|
>      x.id(self.id)
>      x.msg(self.msg)
>      x.error_date(self.error_date.strftime('%Y-%m-%d'))
>    end
>
> I think that you'd get a bunch of errors with:
>
>    Errors.find(:all, :conditions => [...]).to_xml(:root => 'errors')
>
> By default, I get output of attributes like this:
>      <created-at type="datetime">2009-01-09T02:58:31Z</created-at>
>      <id type="integer">110</id>
>      <reference>From Anne</reference>
> When I do #to_xml.  Notice the date format for the type="datetime".  
> What is the actual class of error_date?  Is it a Date or a DateTime or  
> a Time?
>
> -Rob
>
> Rob Biedenharn          http://agileconsultingllc.com
> r...@agileconsultingllc.com
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to