📜  rails 电子表格电子邮件附件 - Ruby (1)

📅  最后修改于: 2023-12-03 15:19:42.198000             🧑  作者: Mango

Rails 电子表格电子邮件附件 - Ruby

如果您正在开发一个使用电子表格的 Rails 应用程序,并希望以电子邮件附件的方式将这些表格发送给用户,那么您来到正确的地方了!

Ruby 提供了一个开源库 axlsx,可以帮助我们在 Rails 应用程序中生成电子表格,并且使用 ActionMailer 将其作为电子邮件附件发送给用户。以下是您需要执行的步骤:

安装必要的库

添加以下 gem 到您的 Gemfile 文件中,并运行 bundle install

gem 'axlsx'
gem 'axlsx_rails'
创建电子表格

在您的控制器中,使用以下代码块创建电子表格:

require 'axlsx'

class OrdersController < ApplicationController
  def export
    @orders = Order.all

    package = Axlsx::Package.new
    workbook = package.workbook

    # 创建新的工作表
    workbook.add_worksheet(name: "orders") do |worksheet|
      # 添加列名称
      worksheet.add_row ["Order ID", "User ID", "Product ID", "Quantity", "Price", "Date"]

      # 添加订单行
      @orders.each do |order|
        worksheet.add_row [order.id, order.user_id, order.product_id, order.quantity, order.price, order.created_at]
      end
    end

    # 将工作表保存到文件系统
    filename = "orders.xlsx"
    package.serialize(filename)

    # 发送电子邮件作为附件
    OrderMailer.with(filename: filename).export.deliver_later

    # 删除临时电子表格文件
    File.delete(filename)
  end
end
创建电子邮件

在您的应用程序中创建一个邮件程序(app/mailers/order_mailer.rb),并使用以下代码块创建电子邮件。

class OrderMailer < ApplicationMailer
  def export
    attachments[params[:filename]] = File.read(params[:filename])
    mail(to: "user@example.com", subject: "Orders Export", body: "Please find attached orders export.")
  end
end
参数
  • filename: 要附加的电子表格文件名。
  • to: 电子邮件的接收者。
  • subject: 电子邮件的主题。
  • body: 电子邮件的正文。

终于,在您的应用程序视图页面中添加电子表格的导出按钮即可。这是一个完整的示例,采用 Bootstrap 样式:

<%= link_to "Export Orders", export_orders_path, class: "btn btn-primary" %>
这是一篇关于使用 Ruby 来生成电子表格并通过电子邮件发送的教程。我们介绍了如何使用 axlsx 库在 Rails 应用程序中生成电子表格。我们还介绍了如何使用 ActionMailer 将电子表格作为电子邮件附件发送给用户。希望这篇教程能够帮助您解决有关电子表格和电子邮件的问题!