J'ai un cas qui tourne autour de ma tête.
J'ai un modèle d'image que je ne souhaite enregistrer que s'il est téléchargé. J'ai également besoin d'informations provenant du téléchargement pour valider l'image (comme la hauteur et la largeur). Mais je veux seulement que le téléchargement se produise si quelqu'un essaie d'enregistrer le fichier l'image pour la première fois.
J'ai donc pensé que la meilleure option serait d'avoir un before_validation
, mais j'aimerais qu'il ne s'exécute que lors de la sauvegarde!
Mon code est sur ce Gist https://Gist.github.com/andreorvalho/b21204977d2b70fdef8
Donc, la partie bizarre est cette on: :save
et on: :create
ont des comportements vraiment bizarres ou du moins pas ce à quoi je m'attendais.
Quand je l'ai mis comme on: :save
Si j'essaye de faire un image.save
sur un test, je peux voir mon before_validation
les rappels ne sont pas exécutés!
Si je mets on: :create
est exécuté dans toutes les situations, peu importe si j'ai exécuté image.save
, image.create
ou image.valid?
Je suppose donc que cela ne fonctionne pas ou que je comprends mal l'objectif de ceux sur les paramètres.
p.s. ma validation lors de la création, se produit également dans toutes les situations enregistrer, créer ou valider?
laissez-moi savoir si quelqu'un est tombé sur le même ou sait pourquoi n'est pas censé fonctionner comme ça.
Le before_validation
le rappel permet des restrictions à des événements particuliers dans le cycle de vie d'un objet.
Vous pouvez utiliser la syntaxe suivante:
before_validation :set_uuid, on: :create
before_validation :upload_to_system, on: [:create, :update]
Voici la documentation de cette option pour Rails 4. , Rails 5.2 et Rails 6. .