TypeError(无法将nil转换为String)与Attachment_Fu

时间:2009-04-28 16:26:27

标签: ruby-on-rails ruby types attachment-fu

我正在使用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等所有操作都没有结果导致相同的类型错误。

我错过了什么?

4 个答案:

答案 0 :(得分:2)

我没有使用attachment_fu,但是我看到public_filename是依赖于某些字段的方法,当你没有连接附件时,这些字段是nil。 Here我读到attachment_fu应该始终有附件 - 这可能是它不适合你的原因。作者还建议使用paperclip插件。看看吧!

答案 1 :(得分:1)

<%= image_tag(@cover.public_filename) unless @cover.nil? %>

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

@cover.public_filename?在此不起作用,因为@covernil对象,因此没有public_filename?方法。

nil.respond_to?('public_filename?') #=> false

答案 2 :(得分:0)

更新

成功:

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

答案 3 :(得分:0)