我正在尝试重命名上传的文件,这是我在 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”
如果您尝试重命名已上传并存储的文件,可以使用
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
无需自定义代码,您的问题应该可以解决。
就我而言,当正在处理的文件不存在时,我会遇到此问题。 我通过添加一个条件(
file.file.exists?
)来检查文件是否存在来修复它,调用recreate_versions!。
file.recreate_versions! if file.present? && crop_x.present?
file.recreate_versions! if file.present? && crop_x.present? && file.file.exists?