【问题标题】:ActionView::Template::Error (undefined method `filename' for nil:NilClass):ActionView::Template::Error(nil:NilClass 的未定义方法“文件名”):
【发布时间】:2019-05-07 03:51:53
【问题描述】:

我正在使用 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-rails rails-activestorage


    【解决方案1】:

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

    更新您的代码以包含以下两行:

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

    【讨论】:

    • 当我按照 Dave Satchell 更新代码时,它会抛出错误 undefined method `signed_id' for #<:filename:0x007f76f46f4330>
    • 这是直接上传的 ActiveStorage 问题 - 请在此处查看问题 github.com/rails/rails/issues/32365
    • 如果你只是在写代码的时候进行测试,并且在数据库中没有任何有用的东西,你可以尝试清除它,否则检查一些其他的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多