如何 return 活动存储 url 指向 Rails 应用程序中的附件(图片)?

How to return active storage url that points to an attachment (picture) in Rails app?

我正在开发一个应用程序,用户可以在其中创建和更新他们的个人资料图片。我遇到的问题是,当用户从移动设备创建他们的个人资料图片时,活动存储成功地为图像创建了附件和 blob。然而,当用户想要更新他们的个人资料图像时,旧附件被清除,但是从 S3 服务返回的 URL 指向空白图像 AKA 不存在的图像(只是一个白屏)。 sample code showing the update action for the profile picture

我正在使用 url_for 助手为附件生成 URL。我不确定这是否是正确的辅助方法。主要问题发生在更新用户个人资料图片时,而不是用户创建个人资料图片时。

对于 S3 上的图像,我将其用于我的应用程序。您将需要更改 @ 变量以匹配您正在使用的内容,然后是您正在使用的字段,我根据您的问题做出了最佳猜测。始终 post 您正在使用的代码会更容易,这样我们就可以提供更好的反馈

<%= @user.profile_picture.service_url %>

您会注意到这在本地不起作用,因此如果在开发期间同时使用两者很重要,请使用类似的东西。

<%= Rails.env == 'production' ? @user.profile_picture.service_url : url_for(@user.profile_picture) if @user.profile_picture.attached? %>

这将为您提供图像的路径,然后使用它,例如,如果它是背景图像

<div style='background-image:url("<%= Rails.env == 'production' ? @user.profile_picture.service_url : url_for(@user.profile_picture) if @user.profile_picture.attached? %>");'>