Как добавить пользовательский столбец в мою конечную точку CSV.generate в приложении Rails? - PullRequest
0 голосов
/ 28 октября 2019

Я следовал этому примеру , но у меня проблемы с показом значения nil в каждой строке (между исходными значениями и дополнительным значением, которое я добавляю.

Вот моя конечная точка контроллера:

def daily_grocery_carts_overview_export
  @data = DailyRetailerShop.all.order("start_date ASC")
  respond_to do |format|
    format.html { redirect_to root_path }
    format.csv { send_data @data.to_csv, filename: "DailyGroceryCarts-#{Time.now.strftime("%Y%m%d%H%M%S")}.csv" }
  end
end

Вот моя модель:

class DailyRetailerShop < ActiveRecord::Base

  def self.to_csv
    # generate site abbreviations & name to add to CSV file
    site_abbreviations = {}
    Partner.all.each do |p|
      site_abbreviations[p[:site_abbreviation]] = p[:name]
    end

    CSV.generate do |csv|
      # remove certain columns
      export_columns = column_names - %w(id site_abbreviation created_at updated_at)
      # add custom column header
      headers = export_columns << 'Website'
      # add to csv file
      csv << headers
      all.each do |item|
        row = item.attributes.values_at(*export_columns).insert(-1, site_abbreviations[item.site_abbreviation])
        csv << row
      end
    end
  end

end

Когда я загружаю файл CSV и открываю его, я вижу пустое значение, за которым следует добавленное пользовательское значениев каждой строке. Если я читаю загруженный файл CSV, вот что я вижу в первых нескольких строках:

data = CSV.read("downloaded_file.csv")
puts data[0..3]
=> [["start_date", "grocery_retailer", "retailer_shops", "Website"], ["2019-10-15", "walmart", "25", nil, "Website1"], ["2019-10-15", "walmart", "24", nil, "Website2"], ["2019-10-15", "instacart", "23", nil, "Website3"]]

Обратите внимание, что для каждой строки есть значение nil (не в заголовках). Я исключаю свое собственное имя заголовка и затем добавляю значения, как я делал выше, тех значений nil (пробелы, когда я открываю файл) больше нет.

Таким образом, появляется пользовательский заголовок, создающий nilзначение для каждой строки. Как мне избавиться от этого?

1 Ответ

0 голосов
/ 29 октября 2019

Я так и не выяснил, почему эти значения nil включены в каждую строку, но я выяснил, как ограничить их отображение. Вот как я изменил функцию в моей модели:

class DailyRetailerShop < ActiveRecord::Base

  def self.to_csv
    # generate site abbreviations & name to add to CSV file
    site_abbreviations = {}
    Partner.all.each do |p|
      site_abbreviations[p[:site_abbreviation]] = p[:name]
    end

    CSV.generate do |csv|
      # remove certain columns
      export_columns = column_names - %w(id site_abbreviation created_at updated_at)
      # add custom column header
      headers = export_columns << 'Website'
      # add to csv file
      csv << headers
      all.each do |item|
        # exclude the last item before inserting site name (custom header)
        row = item.attributes.values_at(*export_columns)[0..-2].insert(-1, site_abbreviations[item.site_abbreviation])
        csv << row
      end
    end
  end

end

Надеюсь, это поможет кому-то в будущем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...