ruby-on-rails 载波:重命名文件名/替换文件

ubby3x7f  于 2023-05-19  发布在  Ruby
关注(0)|答案(1)|浏览(237)

我已经尝试了许多解决方案,但没有一个帮助我。
我已经上传了文件,存储在我的文件夹本地。我需要简单地重命名它的文件名(我没有找到任何简单的方法来做到这一点)或替换文件与新的文件名根据整个有效的过程载波(重命名文件名在SanitizedFile,附件模型,存储::文件等实体)。
所以现在我有一个Attachment模型:mount_uploader :content, ContentUploader
并尝试使用这样的代码重命名文件名在同一模型:

def filename=(new_filename)
    new_filepath = File.join(File.dirname(content.file.path), new_filename)
    content.file.move_to(new_filepath)

    write_attribute :content, content.file.filename
  end

当我检查attachment.content它仍然有旧的文件名,所以似乎什么都没有发生。因此,文件在物理上重命名,但CW的所有示例(如附件)未更新。
但是当我尝试调用attachment.save时,我有一个错误:<ActiveModel::Error attribute=content, type=blank, options={}>
什么是正确的方法来简单地重命名CarrierWave文件的文件名或将其替换为新的文件名?

9rbhqvlz

9rbhqvlz1#

要在更新模型时重命名文件,您可以在模型中定义一个方法,并使用CarrierWave中的#move_to方法。
例如:

class ModelName < ActiveRecord::Base
  mount_uploader :content, ContentUploader

  def rename_file
    if attribute_name.present? && attribute_name.file.present?
      new_filename = "new_filename.ext" # Set the desired new filename
      attribute_name.file.move_to(new_filename)
      attribute_name.file.filename = new_filename
    end
  end
end

在本例中,new_filename.ext应替换为所需的新文件名和扩展名。

相关问题