On 6 May 2011, at 20:47, Robert Walker <[email protected]> wrote:
> Joan Gu wrote in post #997068: >> I have an object array @keywords = Keyword.find_by_sql(sql). Now I need >> to write all values of @keywords to a csv file, and because the sql >> statement is dynamically generated, hence the attribute names are >> dynamic too. How can I do it? > > Keyword.write_csv(@keywords, "my.csv") > > Keyword.rb > -------------------------- > require 'csv' > > class Keyword < ActiveRecord::Base > def self.write_csv(keywords, file) > CSV.open(File.join(Rails.root, file), "wb") do |csv| > csv << keywords[0].attribute_names > keywords.each do |keyword| > csv << keyword.attributes.values I'm not sure there much guarantee that each row will output its columns in the same order (there's probably a better chance of this happening on 1.9) Fred > end > end > end > end > -------------------------- > > my.csv > -------------------------- > created_at,id,name,updated_at > 2011-05-06 19:32:47 UTC,1,Text,2011-05-06 19:32:47 UTC > 2011-05-06 19:32:47 UTC,2,CSV,2011-05-06 19:32:47 UTC > 2011-05-06 19:32:47 UTC,3,"Quoted, because it contains a > 'comma'",2011-05-06 19:44:46 UTC > 2011-05-06 19:32:47 UTC,4,"Better escape these ""double > quotes""",2011-05-06 19:46:29 UTC > -------------------------- > > Notice there are a couple of tricky cases in the CSV output that you'd > have to deal with yourself if you don't use the CSV class. > > -- > Posted via http://www.ruby-forum.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 [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > -- 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 [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

