【问题标题】:Checking if image is ".attached?" when attaching same image to multiple models fails检查图像是否为“.attached”?将相同图像附加到多个模型时失败
【发布时间】:2019-04-01 03:41:53
【问题描述】:

我正在尝试将相同的活动存储映像附加到两个不同的模型,原因是,我不希望存储文件的两个副本,并且我想优化数据库查询,以便我可以查询“活动”显示图像,而不必同时查询活动和帖子。 图像附加,但是当我使用 command.attach 时?它为活动返回 false。但是当我做@activity.image时它显示它有一个图像

使用 Active Storage,这是我的代码

    @post.image.attach(io: File.open(image_file), filename: file_name)
    @activity.image.attach(@post.image)

在控制台中:

    >@post.image.attached?
=> **true**

    >@post.image
=> #<ActiveStorage::Attached::One:0x000055d2dd844aa8 @name="image", @record=...

    >@activity.image
=> #<ActiveStorage::Attached::One:0x000055d2dd8529f0 @name="image", @record=...    

    >@activity.image.attached?
=> **false**

在视图中:

<%= image_tag @post.image %>  **IMAGE SHOWS UP**
<%= image_tag @activity.image %>  **NO IMAGE**

【问题讨论】:

  • 尝试以与发布相同的方式将图像附加到活动
  • 检查我的答案。也让我知道确切的情况。 @post 会不会有一张图片,并且在活动中可能会引用相同的图片? @activity 会有来自帖子的图片和它自己的图片吗?。

标签: ruby-on-rails rails-activestorage


【解决方案1】:

attach 方法需要一个文件对象作为参数。请参考attach(attachable)。如果您想为 2 个模型使用相同的图像/附件,那么您可以在一个模型中上传并在其他模型中使用 url 引用。

@post.image.url

这可以使用并保存为字符串:活动模型中的附件 url。因此,可以从两者引用相同的文件。但如果活动模型也可能包含新附件,那么最好有 2 个副本。此外,如果图像从引用模型中删除,则其他模型可能会受到影响。

【讨论】:

  • #<:attached::one:0x00007f76c4ec5580> 的未定义方法 `url'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多