【问题标题】:How to display image in rails with ActiveStorage如何使用 ActiveStorage 在 Rails 中显示图像
【发布时间】:2021-06-18 13:06:08
【问题描述】:

导轨:6.1 按照 ActiveStorage 文档中的基本步骤,我为我的用户模型添加了一个头像字段,并且上传似乎成功了。但是当我想显示 @user.avatar 时,我得到了一个图片的 url,但 url 似乎是 404。图片没有显示。

这是我的图片标签:

<img src="<%=  image_path(url_for(@user.avatar)) %>" alt="Avatar for  <%= @user.username %>">
<%= image_tag @user.avatar, class: 'user-image', alt: "Avatar for #{@user.username}" %>

这两个都失败了。渲染的 HTML 在这里:

<img src="/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--569f9d466f5dd0d4917db040f0f87d948c0af667/paddle.png?locale=en" alt="Avatar for Someone">

查看路径,paddle.png 是我上传的图像,我认为上传是可以的。但是为什么不显示呢?

【问题讨论】:

  • 图片上传到哪里? S3?您确定这些图片已设置为可公开查看吗?
  • 这是开发环境,我没有使用外部服务。
  • 好吧,您能验证一下图片是否正在上传到 URL 指向的位置吗?
  • 对不起,我不知道去哪里找。但我有我的存储文件夹,它在storage/2e/gt/21djawhdrtz535fre1 和另一个具有相同结构的嵌套文件夹中有这些。到目前为止,我添加了 2 张图片,其中有两张。但只是为了尝试我创建了一个新模型并检查了现在存储中有 3 个文件夹。所以每张图片都在那里。
  • 如果在浏览器中打开图片所在的路径,会显示出来吗?或者您也收到 404 错误?

标签: ruby-on-rails rails-activestorage


【解决方案1】:

好的,我终于找到了问题所在。首先 ActiveStorage 与 UUID 模型不兼容。对于给定的12hefhs-342jfsoeif-senfs-senfks UUID,更重要的是,它采用第一个连续数字并将其用作 ID。在我看来这是一个大问题。当我们尝试将 UUID 保存在 bigint(默认 id)字段中时,我们不会像其他 rails 模型那样收到任何错误消息。为了克服这个问题,我不得不添加这些迁移in this gist 然后另一个问题是我有一个正则表达式可以将所有请求重定向到同一路径的语言环境版本。像这样:

get "/*path", 
    to: redirect("/#{I18n.default_locale}/%{path}", status: 302),
    constraints: { path: /(?!(#{I18n.available_locales.join("|")})\/).*/ },
    format: false

这也是重定向图片网址... 删除它可以解决问题。但是又介绍了一个……如何重定向……

【讨论】:

    【解决方案2】:

    试试这个:

    <%= image_tag  @user.avatar.to_s, class: "user-image" %>
    

    【讨论】:

    • 不,这对我没有帮助。 :(
    • Heroku 是否存在这个问题?或本地
    • 发生在本地。
    • 试试这个:
    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 2019-04-11
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 2021-06-23
    • 2018-08-27
    • 1970-01-01
    相关资源
    最近更新 更多