2015-02-17 23 views
11

Próbuję dodać dodatkowe pola do CarrierWave Uploader tak, że są one przechowywane jako część samego Uploader i razem z polami CarrierWave, takie jak @file, @model, @storage itpDodatkowe pola w CarrierWave Uploader

Pola są również zależne od wersji i dlatego wolę mieć do nich dostęp za pośrednictwem <my_model>.<my_uploader>.attribute i
<my_model>.<my_uploader>.versions[:<the_version>] zamiast dodatkowych kolumn w modelu.

Próbowałem wykonać próbę carrierwave-meta gem, ale wystąpił błąd (NoMethodError: undefined method \'original_filename' for #<CarrierWave::Storage::Fog::File:0xab4134c>) , który prawdopodobnie nie został jeszcze naprawiony.

Jakieś pomysły lub sugestie, jak najlepiej to osiągnąć?

Odpowiedz

3

Nie jestem w 100% jasny, co próbujesz zrobić.

Kiedy używam gema carrierwave, tworzę ścieżkę zawierającą niektóre z tych informacji. W moich applaications normalnie mieć plik app/przesyłających/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 

od tego zawsze wiem model, jaki typ pliku oraz identyfikator. Wszystkie inne informacje na temat tego modelu zwykle zapisuję w bazie danych.

Mam nadzieję, że to pomoże i ustawia cię w dobrym kierunku

1

Twój błąd jest związany z mgły

w moim Picture Uploader mogę ustawić czytnik atrybutu i pisarz

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 

I otworzyć rails console, aby przetestować model:

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

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

picture.field 
"your text" 

O wersjonowania i błędów jesteś mającego 'NoMethodError: undefined method \'original_filename' for #<CarrierWave::Storage::Fog::File:0xab4134c>' zgadzam się z MZaragoza

CarrierWave::Storage::Fog::File.new przyjmuje trzy parametry

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

uploader, self i uploader.store_path tak aby pomóc nam rozwiązać ten problem, należy podać swoje CarrierwaveUploader kod modelu i wyjście uploader.store_path

Wielkie dzięki