NoMethodError:nil 的未定义方法“body”:NilClass

问题描述 投票:0回答:2

我正在尝试重命名上传的文件,这是我在 image_uploader.rb 上的代码:

def filename
    if !cached? && file.present? 
      new_filename = 'wow.jpg'
      new_path = File.join(File.dirname(file.path), new_filename)
      new_sf = CarrierWave::SanitizedFile.new(new_path)
      cache!(new_sf)
      recreate_versions!
      new_filename
    else 
      super 
    end 
  end

做的时候

重新创建_版本!

我遇到了这个错误:

NoMethodError:nil:NilClass 的未定义方法“body”

ruby-on-rails carrierwave fine-uploader
2个回答
0
投票

如果您尝试重命名已上传并存储的文件,可以使用

move_to
方法(文档)。

假设您有一个

User
模型,并为
avatar
安装了 Carrierwave。然后,从 Rails 控制台,您可以调用:

User.find(1).avatar.path
=> /path/to/avatar/1/image.jpg

User.find(1).avatar.file.move_to("/path/to/avatar/1/new_image_name.jpg")

User.find(1).avatar.path
=> /path/to/avatar/1/new_image_name.jpg

无需自定义代码,您的问题应该可以解决。


0
投票

就我而言,当正在处理的文件不存在时,我会遇到此问题。 我通过添加一个条件(

file.file.exists?
)来检查文件是否存在来修复它,调用recreate_versions!。

  • 原始代码(ruby):

file.recreate_versions! if file.present? && crop_x.present?

  • 更新代码(ruby):

file.recreate_versions! if file.present? && crop_x.present? && file.file.exists?

© www.soinside.com 2019 - 2024. All rights reserved.