Rails Active Storage生成下载链接报错undefined method filename 如何修复?
问题修复方案
错误原因
rails_blob_path 要求传入 ActiveStorage::Blob 实例,但你传入的是 Order 模型对象(变量 f),而 Order 类并没有 filename 方法,因此触发报错。
解决方案
根据你的附件关联类型调整代码:
情况1:模型是单附件关联(has_one_attached :file)
如果你的 Order 模型定义的是单个附件关联:
# app/models/order.rb class Order < ApplicationRecord has_one_attached :file end
视图中要调用模型的附件属性,传入对应的 Blob 对象:
<%= link_to 'download', rails_blob_path(f.file, disposition: "attachment") %>
情况2:模型是多附件关联(has_many_attached :files)
从你代码里的 f.files.attached? 可以判断,你的模型用的是多附件关联:
# app/models/order.rb class Order < ApplicationRecord has_many_attached :files end
这种情况下需要遍历每个附件,单独生成下载链接:
<% if f.files.attached? %> <% f.files.each do |file| %> <%= link_to "下载 #{file.filename}", rails_blob_path(file, disposition: "attachment") %> <% end %> <% end %>
核心要点
rails_blob_path 的参数必须是 Active Storage 管理的 Blob 对象,而不是你的业务模型实例。通过模型的附件关联属性(f.file 或 f.files 中的单个元素)才能获取到正确的 Blob 对象。
内容的提问来源于stack exchange,提问作者uma
相关产品推荐
相关产品推荐

