首页 > 解决方案 > 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: []

标签: ruby-on-railsrails-activestorage

解决方案


.each循环内部,每个附件条目将被称为attachment而不是@assignment.attachment。在错误的情况下,@assignment.attachment为零。

更新您的代码以具有以下两行:

<%= image_tag url_for(attachment) %> <%= link_to rails_blob_path(attachment.filename, disposition: "attachment") %>


推荐阅读