Home > Enterprise >  Generating CSV in Rails from crossed Model
Generating CSV in Rails from crossed Model

Time:11-07

I have a method to_csv which collect the guest_id from a Booking table, but instead of returning the guest_id, i would like to retrieve the first_name and last_name as well as the email from the User table and put each of them in a row in a csv file. My method looks as follow:

def self.to_csv
    attributes = %w[guest_id]
    CSV.generate(headers: true) do |csv|
      csv << attributes
      all.each do |contact|
        csv << attributes.map { |attr| contact.send(attr) }
      end
    end
  end

Does anybody know how i could do this please ?

CodePudding user response:

Assume you have the correct one to one user relation defined in Booking.

def self.to_csv
  attributes = %w[guest_id first_name last_name email]
  CSV.generate(headers: true) do |csv|
    csv << attributes
    all.includes(:user).each do |booking|
      csv << [booking.guest_id, booking.user.first_name, booking.user.last_name, booking.user.email]
    end
  end
end

please note now guest_id, user.first_name, user.last_name, user.email are in a row. If you want a different format, you can adjust accordingly.

  • Related