Установить кодировку символов при создании CSV-файла Rails 4.2

У меня есть модуль для создания CSV-файла модели при включении.

# app/models/concerns/csv_exportable.rb
module CsvExportable
  extend ActiveSupport::Concern

  included do
    def self.to_csv(options = {})
      CSV.generate(options) do |csv|
        csv << column_names
        all.each do |thismodel|
          csv << thismodel.attributes.values_at(*column_names)
        end
      end
    end
  end
end

и я включаю модуль в модели, для которых я хочу создать файл csv

# app/models/product.rb
class Reason < ActiveRecord::Base
  include CsvExportable
  .
  .
end

В моем контроллере я делаю

respond_to do |format|
  format.html
  format.csv { send_data @products.to_csv, filename: 'products.csv' }
end

Я хочу установить кодировку символов сгенерированного CSV-файла на Shift_JIS вместо utf-8 по умолчанию. Каков наилучший способ сделать это? Спасибо

РЕДАКТИРОВАТЬ:

Я пытался

format.csv { send_data (@products.to_csv).encode("SHIFT-JIS"), filename: 'products.csv' }

теперь я получаю сообщение об ошибке Encoding::ConverterNotFoundError code converter not found (UTF-8 to SHIFT-JIS)


person Tony Vincent    schedule 08.08.2016    source источник


Ответы (2)


format.csv { 
  send_data (@products.to_csv).encode(Encoding::SJIS), 
  filename: 'products.csv', 
  type: 'text/csv; charset=shift_jis'
}

Сделал трюк

person Tony Vincent    schedule 08.08.2016
comment
Можно принять свой собственный ответ, если он сработал для вас :) - person Paul Fioravanti; 08.08.2016

Вы можете передать параметр encoding: '<non utf-8 encoding>' в хэше options, который вы передали to_csv в CsvExportable, чтобы он был доступен для метода CSV.generate при создании файла csv.

person bhanu    schedule 08.08.2016
comment
Уже пробовал это неизвестное имя кодировки - SHIFT-JIS - person Tony Vincent; 08.08.2016