
May 7th, 2007, 07:26 PM
|
|
Contributing User
|
|
Join Date: Mar 2003
Posts: 174
Time spent in forums: 14 h 27 m 11 sec
Reputation Power: 11
|
|
|
Problems w/ selecting model data in the right order
Hello,
I'm trying to extract data from two related tables and send only specified fields to a method that creates a csv export. The problem is when send the data from the find method, only some of the fields match up in the export and are actually exported. I really only need to export the email, phone, and organization fields from the users table and the first_name, last_name, and expire_on fields from the accounts table. Accounts belongs_to the users table via the user_id.
Code:
@account_all = Account.find(:all, :select => 'accounts.*, users.email, users.phone, users.organization',
:conditions => @conditions,
:joins => "LEFT OUTER JOIN users on users.id = accounts.id" ,
:order => 'accounts.created_at DESC')
I tried to scrub the fields I needed using the collect method:
Code:
@format_account = @account_all.collect do |account|
account.first_name = account.first_name
account.last_name = account.last_name
account.phone = account.phone
account.email = account.email
account.organization = account.organization
account
end if @account_all
here's the method call and export
Code:
@account_keys = ['first_name', 'last_name', 'phone','email', 'organization']
csv_string = format_faster_csv(@format_account, @account_keys)
send_data(csv_string, :type => 'text/csv; charset=iso-8859-1; header=present', :disposition => "attachment; filename=exported_accounts.csv")
Here's the export method:
Code:
def format_faster_csv(csv_array, fields=csv_array.first.keys)
csv_string = FasterCSV.generate do |csv|
csv << fields.map {|f| f.titleize}
csv_array.each do |row|
csv << fields.map{|f| row[f]}
end
end
end
Any idea what I'm doing wrong?
|