2

我正在使用 Attachment_fu 在我的 Rails 应用程序中处理文件附件,它提供了public_filename一种检索文件 URL 的方法。我在一个名为 Cover 的模型上使用它,所以如果我想调用上传的封面图片的 URL,在视图中我会这样做:

<%= image_tag(@cover.public_filename) %>

当用户有适当的附件时,这工作得很好,但在我的应用程序中,用户不需要上传附件。

因此,调用@cover.public_filename将抛出 TypeError: Can't convert nil into String ,原因很明显,文件为 nil。

但是,由于对象为零,我无法有效地为这个问题添加逻辑,并且我所有尝试做类似的事情unless @cover.public_filename.nil?if @cover.public_filename == nil都没有结果并导致相同的类型错误。

我错过了什么?

4

4 回答 4

2

我没有使用 attachment_fu,但正如我所见,public_filename 是一种方法,当您没有附加附件时,它依赖于一些为零的字段。在这里我读到 attachment_fu 应该总是有附件 - 这可能是它对你不起作用的原因。作者还建议使用回形针插件。看看吧!

于 2009-04-28T20:01:25.773 回答
1
<%= image_tag(@cover.public_filename) unless @cover.nil? %>

抱歉,无法发表评论,所以这里有一个更新

@cover.public_filename?在这里不起作用,因为@cover它是一个nil对象,因此没有public_filename?方法。

nil.respond_to?('public_filename?') #=> false
于 2009-04-28T17:17:16.540 回答
0

这可能会有所帮助.. http://david-burger.blogspot.com/2008/10/attachmentfu-with-optional.html

于 2009-07-25T12:17:17.983 回答
0

更新:

做了:

<%= image_tag(@cover.public_filename) if @cover && @cover.public_filename? %>

于 2009-04-28T17:17:57.850 回答