2017-10-07 52 views
6

Mam standardowy program do przesyłania obrazów za pomocą Carrierwave. Używam również PostgreSQL. Więc to, co moja wygląda migracja do dodawania zdjęć jako JSON:Jak ustawić domyślny adres URL dla obrazów [0] w Carrierwave?

class AddImagesToListings < ActiveRecord::Migration[5.1] 
    def change 
    add_column :listings, :images, :json 
    remove_column :listings, :image 
    end 
end 

chcę zrobić zdjęć [0] zawsze mieć jakiś obraz, ale wydaje się, że w dokumentacji Carrierwave obejmuje to tylko dla pojedynczych przesłanych plików. Oto moja metoda default_url:

def default_url(*args) 
    ActionController::Base.helpers.asset_path("default/" + ["default.jpg"].compact.join('_')) 
end 

To działało, gdy miałem tylko: obraz, ale teraz nie jest. Czy istnieje sposób na ustawienie wartości domyślnej dla obrazów [0], tak aby uzyskać poprawne obrazy [0] .url dla każdego posiadanego wykazu (pomimo tego, czy użytkownik dodaje obraz do wykazu)?

Odpowiedz

1

Ponieważ Carrierwave nie pomaga w tej sprawie, możesz użyć czegoś takiego, jak napisanie pomocnika lub oddzwanianie do tej pracy. Oto kilka sugestii, które mogą Ci się spodobać.

  1. Napisz pomocnika
module CarrierwaveHelper 
    def render_image_url(images, index) 
    return "Default.jpg" if index == 0 
    images[index].url 
    end 
end 

i po prostu zadzwonić render_image_url (obrazy, 0) w widoku zamiast obrazów [0] .url

  1. napisz oddzwonienie w swoim modelu

before_create: assign_default_image czy może trzeba before_update

def assign_default_image 
    self.image[0] = "default.jpg" 
end 
+0

Wiesz jeśli carrierwave posiada wbudowaną funkcję dbać o to? –

+0

Nie można znaleźć czegoś takiego ... –