ActionView::Template::Error(nil:NilClass 的未定义方法“文件名”):

ActionView::Template::Error (undefined method `filename' for 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") %>