Ruby on rails Carrier必须存储完整路径

Ruby on rails Carrier必须存储完整路径,ruby-on-rails,Ruby On Rails,是否可以让CarrierWave在数据库中存储上传文件的完整路径,而不仅仅是文件名,并在每次访问时重新生成这些文件 我之所以希望这样做,是为了能够更改我存储文件的结构,而不会使已上载的文件消失,直到它们移动到新位置。在您的上载程序中,您有以下结构: class YourUploader < CarrierWave::Uploader::Base ... def store_dir "uploads/#{model.class.to_s.underscore}/#{moun

是否可以让CarrierWave在数据库中存储上传文件的完整路径,而不仅仅是文件名,并在每次访问时重新生成这些文件


我之所以希望这样做,是为了能够更改我存储文件的结构,而不会使已上载的文件消失,直到它们移动到新位置。

在您的上载程序中,您有以下结构:

class YourUploader < CarrierWave::Uploader::Base
  ...

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  ...
end
class YourUploader

我认为如果您将
store\u dir
更改为完整路径,它将执行您想要的操作。

我的解决方法是将目录存储在单独的属性上:

class MyModel
  before_save do
    self.content_path ||= "uploads/my_model/contents/#{id}"
  end
end
然后,您的上载程序将如下所示:

class YourUploader < CarrierWave::Uploader::Base
  ...

  def store_dir
    model.content_path
  end

  ...
end
class YourUploader
我已经这样定义了store\u dir,路径不是保存到数据库中,而是保存到文件名。如果将完整路径保存到数据库中,在定义新目录结构后,您必须再次更新数据库中的所有文件database@Octopu-保罗,是的,在数据库中移动文件并更新它们将逐个记录进行。