2017-10-07 2 views
6

J'ai un téléchargeur d'image standard en utilisant Carrierwave. J'utilise aussi Postgres. Voilà donc ce que ma migration ressemble pour ajouter des images comme JSON:Comment définir une URL par défaut pour les images [0] dans Carrierwave?

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

Je veux faire des images [0] ont toujours une certaine image, mais il semble que la documentation Carrierwave ne couvre que cela pour le téléchargement de fichier. En ce moment, voici ma méthode DEFAULT_URL:

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

Ce travaillait quand je n'avais: l'image, mais maintenant il n'est pas. Est-il possible de définir une valeur par défaut pour les images [0] de sorte que j'obtiens une image valide [0] .url pour chaque liste que j'ai (malgré que l'utilisateur ajoute ou non une image à la liste)?

Répondre

1

Comme Carrierwave ne vous aide pas dans ce domaine, vous pouvez peut-être utiliser quelque chose comme écrire une aide ou un rappel pour ce travail. Voici quelques suggestions qui pourraient vous intéresser.

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

et simplement appeler render_image_url (images, 0) dans votre vue au lieu d'images [0] .url

  1. écrire un rappel dans votre modèle

before_create: assign_default_image ou peut-être que vous aurez besoin before_update

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

Savez-vous si carrierwave a un construit en fonction de prendre soin de tout cela? –

+0

ne pouvait pas trouver quelque chose comme ça ... –