如何附加新创建的 .xlsx 文件进行记录?
How to attach newly created .xlsx file to record?
class MyLog < ApplicationRecord
has_one_attached :xlsx_file
end
我创建 .xlsx 文件作为电子邮件附件:
xlsx = render_to_string layout: false, template: "dir/template"
xlsx_base64 = Base64.encode64(xlsx)
attachment = {mime_type: Mime[:xlsx], content: xlsx_base64, encoding: 'base64'}
attachments["file.xlsx"] = attachment
我还想将此文件添加到 MyLog table 作为附件:
MyLog.create(
xlsx_file: xlsx
)
但是 xlsx 是一个字符串,它不起作用。在通常的示例中,可附加文件来自带有 ActionDispatch::Http::UploadedFile class 的 file_field 标签,并且它正在运行。如何将新创建的 with calsx .xlsx 文件附加到我的记录中?
无需使用上传文件即可完成此操作的方法是 .attach
函数 (docs)。
示例:
xlsx = render_to_string layout: false, template: "dir/template"
log = MyLog.create
log.xlsx_file.attach(io: StringIO.new(xlsx), filename: 'file.xlsx', content_type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
如果您正在从文件系统读取数据,您也可以将 StringIO.new(string_content)
替换为 File.open(filename)
。