Rails 和 Shrine 创建带有附件的模型记录

Rails and Shrine create model record with attachment

我需要使用上传器通过 Shrine 上传图片,我这里有示例中的默认上传器,包括一些衍生工具。

点赞https://shrinerb.com/docs/getting-started

但我想在 IRB 中创建新实例,但我不知道如何将图像正确传递给 Shrine。当我完成它时,它将在脚本中用于转换一堆图像。

如果我这样做:

Images.new(
  title: title,
  image: File.open("image.png")
)

验证失败,因为 mime-type 为空。当我使用表单上传图片时,有 ActionDispatch::Http::UploadedFile 个包含完整信息的对象。

请问,我怎样才能将图像传递给上传者以进行正确处理、mime 类型存储和创建衍生品?

如果我试试这个。

attacher = Shrine::Attacher.from_model(new_image, :image)
      attacher.assign(image)

inside image 是图像的路径,它失败于:

*** JSON::ParserError Exception: 784: unexpected token at

如果我将 File.open(image) 传递给 assign 方法,我会得到上传的原始图像,但没有 mime 类型,也没有衍生图像。

我有点困惑。

谢谢

我有办法。

Shrine 上传器需要一个以 bin 模式打开的文件对象,所以

        image: File.open(image, binmode: true)

正在创建模型实例 class。

有时当您看到此解析错误时,这是​​因为该记录在您尝试更新的列中已有一些数据。因此它尝试将此列读取为 JSON,但由于它可能是字符串或随机字符,因此它将失败。尝试查看您的数据库中是否存在非 null 或非 JSON {} 值。