Дополнительные поля в 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

Спасибо большое