Дополнительные поля в CarrierWave Uploader
Я пытаюсь добавить дополнительные поля в CarrierWave Uploader, чтобы они были сохранены как часть самого Uploader и вместе с Поля CarrierWave, такие как @file
, @model
, @storage
и т.д.
Поля также зависят от версии, поэтому я предпочел бы иметь доступ к ним через <my_model>.<my_uploader>.attribute
и
<my_model>.<my_uploader>.versions[:<the_version>]
вместо дополнительных столбцов в модели.
Я попробовал несущий символ-мета-камень, но столкнулся с ошибкой (NoMethodError: undefined method \'original_filename' for #<CarrierWave::Storage::Fog::File:0xab4134c>
)
что, похоже, еще не исправлено.
Любые идеи или предложения о том, как наилучшим образом выполнить это?
Ответы
Ответ 1
Я не на 100% понимаю, что вы пытаетесь сделать.
когда я использую драгоценный камень несущей, я создаю путь, который содержит некоторую часть этой информации. В моих приложениях у меня обычно есть файл 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
из этого я всегда знаю модель, какой тип файла и идентификатор.
Все остальные сведения об этой модели я обычно сохраняю в базе данных.
Я надеюсь, что это поможет и поставит вас в правильном направлении
Ответ 2
ваша ошибка связана с туманом
В моем Загрузка изображений Я могу установить считыватель и запись атрибутов
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
Спасибо большое