【问题标题】:TypeError (Can't convert nil into String) With Attachment_FuTypeError (Can't convert nil into String) With Attachment_Fu
【发布时间】:2009-04-28 16:26:26
【问题描述】:

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

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

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

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

但是,由于对象为 nil,因此我无法有效地为此问题添加逻辑,并且我所有尝试执行诸如 unless @cover.public_filename.nil?if @cover.public_filename == nil 之类的操作都没有结果,并导致相同的类型错误。

我错过了什么?

【问题讨论】:

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


    【解决方案1】:

    我没有使用 attachment_fu,但正如我所见,public_filename 是一种依赖于某些字段的方法,当您没有附加附件时,这些字段是 nil。 Here 我读到attachment_fu 应该总是有附件——这可能是它不适合你的原因。作者还建议使用paperclip 插件。看看吧!

    【讨论】:

    • 好吧,我会的。感谢您的提示。
    【解决方案2】:
    <%= image_tag(@cover.public_filename) unless @cover.nil? %>
    

    抱歉,不能评论,所以这里是 更新

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

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

    【讨论】:

    • 感谢您的更新。在这种情况下,@cover 为 nil 且 @cover.class=> NilClass 完全有意义。在使用 ,但似乎无法弄清楚原因。
    • 是错字吗?它应该是unless @cover.nil?(注意问号)而不是unless @cover.nil
    • 是的,错字。我很抱歉。 不幸的是,在这种情况下对解决类型错误没有影响。看起来错误是在@cover.public_filename 以任何一种方式处理时引起的。
    • 它应该可以工作(刚刚在我的控制台中测试过)。您确定您正在查看正确的代码吗?也许在其他地方还有另一个 image_tag(@cover.public_filename) 实例?您是否尝试过重新启动服务器(apache/webrick/thin/whatever)?
    • 太奇怪了。我已重新启动服务器,但找不到另一个实例。堆栈跟踪看起来像是从 attachment_fu/backends/s3_backend.rb 生成的(我在 Attachment_fu 中使用 S3 后端)。我无法想象这可能是插件中的错误,但我不知道这可能来自哪里。
    【解决方案3】:

    更新:

    制作:

    &lt;%= image_tag(@cover.public_filename) if @cover &amp;&amp; @cover.public_filename? %&gt;

    【讨论】:

    • 这符合我的预期,但返回的是 NoMethodError(未定义的方法 `public_filename?')。这有意义吗?
    • 我正在调查附件_fu 的来源,但没有看到方法 public_filename? .还是我错了?
    【解决方案4】:
    猜你喜欢
    • 2013-07-31
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    相关资源
    最近更新 更多