没有使用回形针将 Nil 隐式转换为字符串错误

Posted

技术标签:

【中文标题】没有使用回形针将 Nil 隐式转换为字符串错误【英文标题】:No implicit conversion of Nil to String Error with Paperclip 【发布时间】:2021-11-04 11:55:42 【问题描述】:

在我的应用程序中,我创建了一个视图,其中列出了我的 S3 存储桶中的所有 PDF,为此我正在使用 Paperclip Gem。但是我现在在终端中收到此错误。

    Error performing Courts::SyncronizeBucketJob (Job ID: 8424356c-9717-4cca-9d76-4b157bab1065) from DelayedJob(default) in 450.5ms: TypeError (no implicit conversion of nil into String):
/Users/conorquarry/RubymineProjects/pair/app/_modules/courts/models/ocr_document.rb:46:in `initialize'
/Users/conorquarry/RubymineProjects/pair/app/_modules/courts/models/ocr_document.rb:46:in `new'
/Users/conorquarry/RubymineProjects/pair/app/_modules/courts/models/ocr_document.rb:46:in `block in <class:OcrDocument>'
/Users/conorquarry/.rvm/gems/ruby-2.5.1/gems/paperclip-6.0.0/lib/paperclip/interpolations.rb:35:in `block (2 levels) in interpolate'
/Users/conorquarry/.rvm/gems/ruby-2.5.1/gems/paperclip-6.0.0/lib/paperclip/interpolations.rb:35:in `gsub!'
/Users/conorquarry/.rvm/gems/ruby-2.5.1/gems/paperclip-6.0.0/lib/paperclip/interpolations.rb:35:in `block in interpolate'
/Users/conorquarry/.rvm/gems/ruby-2.5.1/gems/paperclip-6.0.0/lib/paperclip/interpolations.rb:34:in `each'
/Users/conorquarry/.rvm/gems/ruby-2.5.1/gems/paperclip-6.0.0/lib/paperclip/interpolations.rb:34:in `interpolate'
/Users/conorquarry/.rvm/gems/ruby-2.5.1/gems/paperclip-6.0.0/lib/paperclip/attachment.rb:556:in `interpolate'
/Users/conorquarry/.rvm/gems/ruby-2.5.1/gems/paperclip-6.0.0/lib/paperclip/attachment.rb:171:in `path'
/Users/conorquarry/.rvm/gems/ruby-2.5.1/gems/paperclip-6.0.0/lib/paperclip/storage/s3.rb:355:in `block in flush_writes'
/Users/conorquarry/.rvm/gems/ruby-2.5.1/gems/paperclip-6.0.0/lib/paperclip/storage/s3.rb:352:in `each'
/Users/conorquarry/.rvm/gems/ruby-2.5.1/gems/paperclip-6.0.0/lib/paperclip/storage/s3.rb:352:in `flush_writes'
/Users/conorquarry/.rvm/gems/ruby-2.5.1/gems/paperclip-6.0.0/lib/paperclip/attachment.rb:247:in `save'
/Users/conorquarry/.rvm/gems/ruby-2.5.1/gems/paperclip-meta-3.1.0/lib/paperclip-meta/attachment.rb:13:in `save'

查看回形针插值文档我看不到我的错误,有人知道我应该从哪里开始吗?以下是引发错误的代码。

   Paperclip.interpolates :document_folder_name do |a, _s|
    Pathname.new(a.instance.object_key).dirname.to_s
  end

【问题讨论】:

错误出现在app/_modules/courts/models/ocr_document.rb:46 上,它试图加载字符串但结果为零。那条线上发生了什么? 第 46 行是我在上面发布的 Pathname.new 行。 【参考方案1】:

错误可通过以下方式重现:

Pathname.new(nil)

所以在这种情况下,a.instance.object_key 为零。

从interpolations doc 开始,a.instance 将是试图生成包含:document_folder_name 的回形针路径的 activerecord(或您正在使用的任何 ORM)模型。

我猜#object_key 是在您的 activerecord 模型上定义的方法,并且返回 nil。

您可以在该块中放置pry / 调试器或打印语句以查看对象是什么,然后为该方法编写单元规范以确保它返回正确的字符串应该相当容易。

理论上调用object_key.to_s 可以修复错误,但意味着:document_folder_name 在回形针计算文件夹路径时会插入一个空字符串,这可能是不可取的。

【讨论】:

以上是关于没有使用回形针将 Nil 隐式转换为字符串错误的主要内容,如果未能解决你的问题,请参考以下文章

gem install / update失败,“没有将nil隐式转换为String”

颤振无效的`Podfile`文件:没有将nil隐式转换为String

重置设计 rails 的密码会导致“没有将数组隐式转换为字符串”错误

我收到此错误无法将字符串隐式转换为 system.data.datatable

想要将 Slidervalue 设置为 UserDefault:线程 1:致命错误:在隐式展开可选值时意外发现 nil [重复]

使用写入打开文件抛出“没有将字符串隐式转换为整数”