rails - 通过Active Storage上载文件后在视图中显示图像

Bai*_*aig 8 ruby-on-rails ruby-on-rails-5.1

我有一个项目正在轨道上5.1.2,我正在尝试在其上实现Active Storage,在线上的几个教程我能够设置Active Storage,我可以看到数据被保存在active_storage_blobsactive_storage_attachments表中.

  1. 教程1
  2. 教程2

我也通过跑步确认user.avatar.attached?并且作出回应我得到了真实所以事情正在发挥作用.

我遇到的问题是在视图中显示图像,我试过了

<%= image_tag(url_for(user.avatar)) %>
Run Code Online (Sandbox Code Playgroud)

NoMethodError:未定义的方法`active_storage_attachment_path'

我做了什么来设置Active Storage

跑完安装命令

rails active_storage:install
Run Code Online (Sandbox Code Playgroud)

这给出了错误不知道如何构建任务'active_storage:install'

但以下命令有效

rails activestorage:install
Run Code Online (Sandbox Code Playgroud)

我已经添加了gem 'activestorage'内部gemfile

这就是我的内心 storage_services.yml

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>
Run Code Online (Sandbox Code Playgroud)

在我的内心我development.rb添加了

config.active_storage.service = :local
Run Code Online (Sandbox Code Playgroud)

在我的User模型里面我添加了has_one_attached :avatar

在更新控制器内部,我添加了附件代码

user.avatar.attach(params[:user][:avatar])
Run Code Online (Sandbox Code Playgroud)
  1. 我可以看到图像被添加到数据库中,
  2. 我可以看到图像保存在root上的存储目录中

但我无法显示它,

我在这里错过了什么?要让图像在视图中显示,我需要做什么?为什么我会收到此错误

NoMethodError:未定义的方法`active_storage_attachment_path'

pun*_*cse 5

config/appication.rb如果您添加了以下行,您能否检查您的文件:

require "active_storage/engine"
Run Code Online (Sandbox Code Playgroud)

我建议你升级你的 rails 版本,5.2 beta因为它已经与 Active Storage gem 合并了。如果您的应用程序具有良好的测试覆盖范围,您现在就可以做到。从 5.1 到 5.2 没有太多变化,请参阅http://edgeguides.rubyonrails.org/5_2_release_notes.html。但它还不稳定,所以你需要检查你是否可以承担这个风险。


Kam*_*war 5

你做错了,你需要替换下面的代码

<%= image_tag(url_for(user.avatar)) %>
Run Code Online (Sandbox Code Playgroud)

<%= image_tag(user.avatar) %>
Run Code Online (Sandbox Code Playgroud)

url_for 用于生成精确的 url 而不是图像标签。