我正在使用Attachment_fu在我的Rails应用程序中处理文件附件,它提供了public_filename
方法来检索文件的URL。
我在名为Cover的模型上使用它,所以如果我想调用上传的封面图片的URL,我会在视图中执行:
<%= image_tag(@cover.public_filename) %>
当用户具有适当的附件时,这很好用,但在我的应用程序中,用户不需要上传附件。
因此,调用@cover.public_filename
会抛出一个TypeError:由于文件为零的明显原因,无法将nil转换为String。
但是,由于对象为零,因此我无法有效地为此问题添加逻辑,并且我执行unless @cover.public_filename.nil?
或if @cover.public_filename == nil
等所有操作都没有结果导致相同的类型错误。
我错过了什么?
答案 0 :(得分:2)
我没有使用attachment_fu,但是我看到public_filename是依赖于某些字段的方法,当你没有连接附件时,这些字段是nil。 Here我读到attachment_fu应该始终有附件 - 这可能是它不适合你的原因。作者还建议使用paperclip插件。看看吧!
答案 1 :(得分:1)
<%= image_tag(@cover.public_filename) unless @cover.nil? %>
很抱歉,无法发表评论,所以这里有一个更新:
@cover.public_filename?
在此不起作用,因为@cover
是nil
对象,因此没有public_filename?
方法。
nil.respond_to?('public_filename?') #=> false
答案 2 :(得分:0)
成功:
<%= image_tag(@cover.public_filename) if @cover && @cover.public_filename? %>
答案 3 :(得分:0)