CarrierWave Uploader中的其他字段

时间:2015-02-17 22:45:31

标签: ruby-on-rails carrierwave

我正在尝试向CarrierWave上传器添加其他字段,以便它们作为上传器本身的一部分存储,并与CarrierWave字段一起存储,例如@file@model@storage等。

这些字段也是特定于版本的,这就是为什么我希望能够通过<my_model>.<my_uploader>.attribute<my_model>.<my_uploader>.versions[:<the_version>]而不是模型中的其他列来访问它们。

我确实尝试了carrierwave-meta gem,但遇到了错误(NoMethodError: undefined method \'original_filename' for #<CarrierWave::Storage::Fog::File:0xab4134c>)  似乎尚未修复。

有关如何最好地完成此任务的任何想法或建议?

2 个答案:

答案 0 :(得分:3)

我并不是100%清楚你想要做什么。

当我使用carrierwave gem时,我会创建一个包含其中一些信息的路径。在我的抱怨中,我通常有一个文件 app / uploaders / image_uploader.rb

  class ImageUploader < CarrierWave::Uploader::Base
    include CarrierWave::RMagick
    def store_dir
      # "uploads/image/file/187/"
      "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
    end
    ...
  end

从这里我总是知道模型,文件的类型和id。 有关此模型的所有其他信息,我通常会保存在数据库中。

我希望这有助于让你朝着正确的方向前进

答案 1 :(得分:1)

你的错误与雾有关

在我的Picture Uploader我可以设置一个属性读者和作家

class PictureUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  storage :file

  def field
    @field
  end

  def field=(field)
    @field = field
  end    

  # attr_accessor :field # for an even shorter way
end

我打开rails console来测试模型:

picture = PictureUploader.new 
=> #<PictureUploader:0x0055804db336e8 @model=nil, @mounted_as=nil>

picture.field=('your text')
=> "your text"

picture.field
"your text"

关于版权和错误'NoMethodError: undefined method \'original_filename' for #<CarrierWave::Storage::Fog::File:0xab4134c>'我同意MZaragoza

CarrierWave::Storage::Fog::File.new需要三个参数

  def store!(file)
    f = CarrierWave::Storage::Fog::File.new(uploader, self, uploader.store_path)
    f.store(file)
    f
  end

uploaderselfuploader.store_path为了帮助我们解决此问题,您应该包含CarrierwaveUploader模型代码和uploader.store_path的输出

非常感谢