在Rails中使用Carrierwave复制模型对象

时间:2013-06-02 15:04:22

标签: ruby-on-rails image duplicates carrierwave symlink

我可以像这样复制一个对象:

  plast = Product.last
  dupobj = plast.dup
  dupobj.image = plast.image
  dupobj.save!

从控制台完美运行。但是,当我想填充数据库时,只需将其包装在for循环中:

  plast = Product.last
  for i in 0..50
    dupobj = plast.dup
    dupobj.image = plast.image
    dupobj.save!
  end

由于某种原因,即使在磁盘上创建目录,我也会得到错误的路径。 错误的路径在模型对象中。磁盘上的那些路径是正确的,复制在那里的文件也是正确的。那么有可能不复制磁盘上的图像(并具有类似符号链接的功能)吗?

1 个答案:

答案 0 :(得分:1)

由于您使用的是CarrierWave Mountuploader,请查看它的默认存储策略。
它是这样的:

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end 

此处model指的是您image所指的对象 model.class.to_s.underscore =>型号名称。在这里,Product
mounted_as =>挂载属性。这里image
model.id =>对象的id =>负责不同的道路。

因此,您必须将地址设为/product/image/34/image.jpg 配置store_dir方法以实现您的想法 祝你好运:)