ruby-on-rails - ActionView::Template::Error(nil:NilClass 的未定义方法“文件名”):
问题描述
我正在使用 rails Active storage 将附件添加到我的分配模型中,并且它不断抛出上述错误
我之前使用了carrierwave gem,但决定改用Active Storage。我需要视图来显示文件和名称,但错误一直显示。当我注释掉该行时,作业视图正在工作,但即使文件是 word、pdf 或 excel 文档,也不能作为图像。
<% if @assignment.attachments.attached? %>
<p>
<strong>Attachments</strong><br>
<% @assignment.attachments.each do |attachment| %>
<%= image_tag url_for(@assignment.attachment) %>
<%= link_to rails_blob_path(@assignment.attachment.filename,
disposition: "attachment") %>
<% end %>
</p>
任务模型
class Assignment < ApplicationRecord
has_many_attached :attachments
end
在分配的控制器中,我允许参数中的附件如下
attachments: []
解决方案
在.each
循环内部,每个附件条目将被称为attachment
而不是@assignment.attachment
。在错误的情况下,@assignment.attachment
为零。
更新您的代码以具有以下两行:
<%= image_tag url_for(attachment) %>
<%= link_to rails_blob_path(attachment.filename, disposition: "attachment") %>
推荐阅读
- jmeter - 了解加速期结束期间和之前的用户数量
- wordpress - 如何使用“联系表格 7”在网站中打开数字键盘
- javascript - javaScript 问题 - setItem 正在覆盖 localstorage
- python - 在浏览器中运行时将自写函数导入 Python 文件的问题
- php - php 数组 - 保存价格低于最大值的所有子数组的值
- angular - 使用 monaco 的 Angular 基于 Web 的代码编辑器
- javascript - 检测何时将控件添加到页面 JS/Jquery
- c# - Angular 6 的 C# HttpPost 进度更新
- html - 跨电子邮件客户端 HTML 邮件 v:rect 按钮宽度为 100%
- python - 使用 tf.gfile.GFile 时 Python 退出