我正在尝试向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>
)
似乎尚未修复。
有关如何最好地完成此任务的任何想法或建议?
答案 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
uploader
,self
和uploader.store_path
为了帮助我们解决此问题,您应该包含CarrierwaveUploader
模型代码和uploader.store_path
的输出
非常感谢