Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-在ActionMailer中附加一个可以读取为UTF8的CSV和BOM_Ruby On Rails_Csv_Encoding_Actionmailer - Fatal编程技术网

Ruby on rails Rails-在ActionMailer中附加一个可以读取为UTF8的CSV和BOM

Ruby on rails Rails-在ActionMailer中附加一个可以读取为UTF8的CSV和BOM,ruby-on-rails,csv,encoding,actionmailer,Ruby On Rails,Csv,Encoding,Actionmailer,在ActionMailer中,我试图将数组转换为CSV,并确保文件可以像在UTF8和BOM中转换一样读取 以前,我将内容复制到一个新的文件中,使用Sublime文本,然后单击文件>使用编码保存>使用BOM的UTF8,否则字符将变得混乱 如何在通过ActionMailer发送内存中的CSV时实现相同的编码?我从未将文件写入磁盘 这是我发送电子邮件的示例代码 class CSVMailer < ApplicationMailer def csv(csv_as_array_of_array,

在ActionMailer中,我试图将数组转换为CSV,并确保文件可以像在UTF8和BOM中转换一样读取

以前,我将内容复制到一个新的文件中,使用Sublime文本,然后单击文件>使用编码保存>使用BOM的UTF8,否则字符将变得混乱

如何在通过ActionMailer发送内存中的CSV时实现相同的编码?我从未将文件写入磁盘

这是我发送电子邮件的示例代码

class CSVMailer < ApplicationMailer
  def csv(csv_as_array_of_array,
    to:,
    cc: [],
    from: 'messages-noreply@example.com',
    reply_to: 'me@example.com',
    subject: 'Here is your CSV made with love Alright here is how I did it, assuming you are sending the following array of arrays to the mailer function

csv_as_array_of_array = [ 
  ['header1', 'header2'], 
  ['row1cell1', 'row1cell2'], 
  ...
]
类CSVMailer主题:“这是你的CSV是用爱制作的好吧,这是我是怎么做的,假设你正在向mailer函数发送以下数组

# Small utility method
def Utility.with_utf8_bom(content)
  "\uFEFF" + content
end
一个简单的实用程序函数将UTF8 bom预先添加到csv就足够了

class CSVMailer < ApplicationMailer
  # app/mailers/csv_mailer.rb
  def send_email_with_csv(csv_as_array_of_array)
    ...
    attach_csv(csv_as_array_of_array, filename: filename)
    mail(to: ...)
  end

  private

  def attach_csv(array_of_arrays, filename:)
    attachments[filename] = {
      mine_type: 'text/csv',
      content: Utility.with_utf8_bom(
        CSV.generate(col_sep: ';', encoding: Encoding::UTF_8) do |csv|
          array_of_arrays.each do |row|
            csv << row
          end
        end
      )
    }
  end
所以在ActionMailer类中