在 Rails 5.2 中尝试显示来自 ActiveStorage 的图像时出错
Errors when trying to display an image from ActiveStorage in Rails 5.2
我正在使用 Rails 5.2 和 Ruby 2.3.7 开发 Rails 应用程序,并希望使用 Active Storage 将图像附加到我的事件对象。
以下是我采取的主要步骤
在 config/environments/development.rb 我确认:config.active_storage.service = :local
文件
event.rb 我添加了这一行:
has_one_attached :event_image
events_controller.rb 我在 event_params
中将 :event_image 属性列入白名单
events/_form.html.erb 我设置了form_for 上传图片
<%= f.label :event_images %>
<%= f.file_field :event_image %>
events/index.html.erb 我尝试用
显示图像
<% if event.event_image.attached? %>
<%= image_tag event.event_image %>
<% end %>
错误:无法将图像解析为 URL:未定义方法 `attachment_url' for :0x00007fca5dcef8b8>
<% if event.event_image.attached? %>
<%= image_tag url_for(event.event_image) %>
<% end %>
错误:Class:0x00007fca5e0109c0>:0x00007fca5dacefe8>
的未定义方法“attachment_path”
我有
确认 active_storage_attachments 和 active_storage_blobs 存在于我的数据库中并且附件保存在那里
如有任何建议,我们将不胜感激。从我所有的谷歌搜索来看,这似乎应该有效
关于此问题的进一步更新。我在我自己的应用程序中重复了相同的步骤并且工作正常。只有在使用 Spree
的应用程序时才会出现这种情况
使用 Spree 时,您应该在 url_for
方法前加上:main_app.url_for
:
image_path(main_app.url_for(event.event_image))
这对 Spree v3.6.5 和 v3.6.6 有效,其他版本不确定。
image_path(main_app.url_for(event.event_image))
它适用于我的 spree 4.0 扩展。
我正在使用 Rails 5.2 和 Ruby 2.3.7 开发 Rails 应用程序,并希望使用 Active Storage 将图像附加到我的事件对象。
以下是我采取的主要步骤
在 config/environments/development.rb 我确认:config.active_storage.service = :local
文件
event.rb 我添加了这一行: has_one_attached :event_image
events_controller.rb 我在 event_params
中将 :event_image 属性列入白名单events/_form.html.erb 我设置了form_for 上传图片
<%= f.label :event_images %>
<%= f.file_field :event_image %>
events/index.html.erb 我尝试用
显示图像<% if event.event_image.attached? %>
<%= image_tag event.event_image %>
<% end %>
错误:无法将图像解析为 URL:未定义方法 `attachment_url' for :0x00007fca5dcef8b8>
<% if event.event_image.attached? %>
<%= image_tag url_for(event.event_image) %>
<% end %>
错误:Class:0x00007fca5e0109c0>:0x00007fca5dacefe8>
的未定义方法“attachment_path”我有 确认 active_storage_attachments 和 active_storage_blobs 存在于我的数据库中并且附件保存在那里
如有任何建议,我们将不胜感激。从我所有的谷歌搜索来看,这似乎应该有效
关于此问题的进一步更新。我在我自己的应用程序中重复了相同的步骤并且工作正常。只有在使用 Spree
的应用程序时才会出现这种情况使用 Spree 时,您应该在 url_for
方法前加上:main_app.url_for
:
image_path(main_app.url_for(event.event_image))
这对 Spree v3.6.5 和 v3.6.6 有效,其他版本不确定。
image_path(main_app.url_for(event.event_image))
它适用于我的 spree 4.0 扩展。