Есть мейлер, в котором генерируется эксель файл и прикрепляется к рассылке, все как здесь:
https://github.com/caxlsx/caxlsx_rails#mailers
xlsx = render_to_string layout: false, template: "my_dir/export"
xlsx_base64 = Base64.encode64(xlsx)
attachment = {mime_type: Mime[:xlsx], content: xlsx_base64, encoding: 'base64'}
attachments["file.xlsx"] = attachment
Мне нужно, чтобы каждый отправленный файл сохранялся. Для этого я добавил новую модель с has_one_attached:
class MyLog < ApplicationRecord
has_one_attached :xlsx_file
end
И в после создания файла хочу создать новую запись и этим прикрепленным файлом:
MyLog.create(
# xlsx - это то, что я выше создал. Возможно нужен xlsx_base64 или attachment
xlsx_file: xlsx
)
Проблема в том, что caxls создает файл и возвращает строку. Это по их инструкции для вложений рассылок нужно. Например, в документации по active_storage_attachment для получения файла используют file_field и с него приходит файл с классом ActionDispatch::Http::UploadedFile. Если его передавать в xlsx_file, то все нормально работает.
Но мне нужно не получать файл через этот таг, а взять новосозданный и его прикрепить. Как это вообще можно сделать?