我试图在ActiveStorage继续保存之前获取用户上传的文件的名称。该表单使用form_with
生成,如下所示:
<%= form_with model: upload do |form| %>
<div class="">
<%= form.file_field :files, multiple: true, direct_upload: true, required: true %>
<%= form.label :files, '', class: 'icon ion-ios-cloud-upload' do %>
<span>click the icon to select files</span>
<% end %>
<div class="actions">
<%= form.submit "Upload", class: "btn btn-primary" %>
</div>
</div>
<% end %>
我已经尝试访问params[:upload][files]
并在其上调用.original_filename
,如此处所述,但我得到错误NoMethodError: undefined method
original_filename' for #String:0x007fac77fd18c8。 当我检查参数时,文件确实以字符串的形式返回,那么如何获得文件名或者如何使
original_filename`工作呢?
4条答案
按热度按时间zengzsys1#
我终于能够通过在文件附加后执行
file.blob.filename
来获得文件名。bhmjp9jg2#
根据ActiveStorage文档,我发现这对我很有效:
在我的例子中,我有一个模型
OP的情况稍有不同,你的情况也可能不同,所以要相应地调整。
Troy的解决方案并不适用于我。我必须添加
.to_s
来获得文件名,而不是ActiveStorage::Filename
对象。但我不确定他为什么在那里使用.blob
。我不需要它,但也许有一个很好的理由。5us2dqdw3#
只是跑步
对我有用。
lsmepo6l4#
您需要将
multipart: true
添加到窗体中。https://guides.rubyonrails.org/form_helpers.html#uploading-files
另一件事是,如果你有多个文件,你会有多个文件名。