Chr*_*ley 50 ruby-on-rails ruby-on-rails-3 carrierwave
我试图在Rails erb模板中显示Carrierwave附件的文件名.以下不起作用:
<%= @page.form.filename %>
Run Code Online (Sandbox Code Playgroud)
这似乎与文档一致.需要一些额外的步骤吗?
我的页面模型如下所示:
class Page < ActiveRecord::Base
mount_uploader :form, FormUploader
end
Run Code Online (Sandbox Code Playgroud)
表单上传器如下所示:
class FormUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def extension_white_list
%w(pdf)
end
end
Run Code Online (Sandbox Code Playgroud)
Zac*_*ker 80
您正在查看的文档是已清理的文件,它是用于实际存储文件的文件.您正在寻找的部分是FormUploader,它是一个上传器,是http://rubydoc.info/gems/carrierwave/0.5.2/CarrierWave/Uploader的一部分
如果要获取文件名,可以直接从数据库列中读取它,也可以使用File.basename(@page.form.path)它轻松地提取它.
kik*_*ito 79
我已经能够通过file内部参数获取文件名:
<%= @page.form.file.filename %>
Run Code Online (Sandbox Code Playgroud)
epy*_*nkn 14
该Carrierwave文档可能有点过,但建议的方式似乎是:
@page.form.file.identifier
Run Code Online (Sandbox Code Playgroud)
@ adamonduty的解决方案很棒.我之前使用过的另一个解决方案,就是在模型上创建一个方法:
def name
file.path.split("/").last
end
Run Code Online (Sandbox Code Playgroud)
你是对的@epylinkn.文档指向使用:
@page.form.file.identifier
Run Code Online (Sandbox Code Playgroud)
但是当我使用它时,我总是得到nil(正如@Cheng评论).
然后我检查了我的对象方法(@page.form.file.methods.inspect),并发现以下工作:
@page.form.file_identifier
Run Code Online (Sandbox Code Playgroud)
在模型的关联上传器类中,定义文件名方法。
def filename
File.basename(path)
end
Run Code Online (Sandbox Code Playgroud)
然后你可以打电话
model_instance.file.filename
Run Code Online (Sandbox Code Playgroud)
从 CarrierWave 1.1.0 开始工作。这是上面 kikito 和 Chris Alley 回答的简洁重述/合并。
| 归档时间: |
|
| 查看次数: |
47116 次 |
| 最近记录: |