ruby-on-rails - 保存前从事件存储附件中读取

标签 ruby-on-rails ruby rails-activestorage

我有用户上传 JSON 文件作为名为 Preset 的模型的一部分,非常标准的 Active Storage 东西。有点不寻常的一件事(我想,鉴于我无法使其工作)是我想从上传的 JSON 文件中获取数据并使用它来注释 Preset记录,像这样:

class Preset < ApplicationRecord
    has_one_attached :hlx_file
    before_save :set_name

    def set_name
        file = JSON.parse(hlx_file.download)
        self.name = file['data']['name']
    end
end

当我调用 hlx_file.download 我得到 ActiveStorage::FileNotFoundError: ActiveStorage::FileNotFoundError .

最佳答案

Rails 6 将文件上传到存储的时间更改为在实际保存记录期间。

这意味着 before_save 或验证不能以常规方式访问文件。

如果您需要访问新上传的文件,您可以获得如下文件引用:

record.attachment_changes['<attributename>'].attachable

这将是要附加文件的临时文件。

注意:以上是一个未记录的内部 api,可能会发生变化 ( https://github.com/rails/rails/pull/37005 )

关于ruby-on-rails - 保存前从事件存储附件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57564796/

相关文章:

mysql - 在使用 Active Record 查询的最佳条件下哪种方式更好

ruby-on-rails - 由于 readline 错误,无法执行 "rails console"

javascript - Rails 4 jquery 高亮效果不执行

ruby-on-rails - Active Storage 的 'content_type' 有什么不同?

ruby-on-rails - 如何在 ActiveStorage 中使用变体选项后保存图像副本。

ruby-on-rails - 每个模型有多个数据库

ruby-on-rails - 如何从字符串中删除回车但保留换行符?

jquery - 如何在 Rails 4 中动态加载数据

ruby - 如何将 PKCS1_PSS_PADDING 与 Ruby 的 RSA 实现一起使用?

ruby-on-rails - 删除多个图像事件存储阵列中的单个图像