Comment faire pour conserver champs d'upload de fichier après rails d'erreur de validation.
J'ai avec plusieurs téléchargements de fichiers, Le problème c'est quand je suis soumettez le formulaire et une erreur de validation se produit, le fichier champ de saisie est remis.
Que je voulais persistent ces fichiers à l'intérieur du fichier champ de saisie pour le processus complet.
J'ai également passé par quelques liens
Comment puis-je "garder" l'image téléchargée sur une erreur de validation de formulaire?
S'il vous plaît laissez-moi savoir ce que sont les différentes options dans de tels cas que l'on peut suivre.
- Depuis Rails 5.2 prend en charge les uploads de fichier avec Stockage Actif, est-il un moyen de conserver les téléchargements après la forme s'affiche à nouveau "nativement" maintenant?
- Ne ActiveStorage dans les Rails 6.0 enfin traiter de ce problème?
Vous devez vous connecter pour publier un commentaire.
Carrierwave est un excellent outil pour gérer les uploads de fichier et peut gérer cela pour vous
https://github.com/jnicklas/carrierwave#making-uploads-work-across-form-redisplays
Créé un repo avec un exemple d'utilisation de Trombone sur des rails et mainting vos fichiers lors de la validation de l'erreur se produit
https://github.com/mariohmol/paperclip-keeponvalidation
J'ai eu à résoudre ce problème sur un récent projet à l'aide du Trombone Gem. C'est très orthodoxe, mais il fonctionne. J'ai essayé d'appeler cache_images() à l'aide de after_validation et before_save dans le modèle, mais elle échoue à créer pour une raison que je ne peut pas déterminer si je viens de l'appeler à partir du contrôleur de la place. J'espère que cela sauve quelqu'un d'autre peu de temps!
modèle:
contrôleur:
vue:
Bien je pensais prendre une approche différente pour cette; au Lieu de stocker temporairement le fichier sur le serveur, pourquoi ne pas le servir au client de soumettre de nouveau lorsque l'utilisateur résout les problèmes de validation.
Cela peut encore besoin d'un peu de raffinement, mais c'est le concept général:
Une solution plutôt qu'une simple solution consiste à utiliser la validation côté client afin que le fichier n'est pas perdu, car l'ensemble de la forme persiste.
Les quelques utilisateurs qui n'ont pas JavaScript activé allez perdre les fichiers entre les demandes, mais peut-être que ce % est si bas pour vous comme pour lui faire un compromis acceptable. Si c'est le chemin que vous décidez d'aller vers le bas, je vous recommande ce petit bijou
https://github.com/bcardarella/client_side_validations
Qui rend l'ensemble du processus très simple et vous n'avez pas à réécrire votre validation en JavaScript
J'ai pris une approche complètement différente de l'autre des solutions sur l'offre ici, comme je n'ai pas envie de commutation à CarrierWave ou en utilisant encore un autre joyau de mettre en œuvre un hack pour contourner ce problème.
En gros, je définir des espaces réservés pour les messages d'erreur de validation puis faire un appel AJAX à la manette. en cas d'échec de la validation, j'ai simplement remplir le message d'erreur espaces réservés - ce qui laisse tout en place côté client, y compris le fichier d'entrée prêt pour une nouvelle soumission.
Exemple qui suit, à la démonstration d'une organisation avec imbriqué adresse de modèle et imbriquée logo modèle (qui a un fichier en pièce jointe) - ce qui a été coupé pour des raisons de concision :
organisations/_form.html.erb
organisations_controller.rb
organisations/validation_errors.js.erb
Vous pouvez utiliser carrierwave: https://github.com/carrierwaveuploader/carrierwave
Ou de valider le modèle via js demande.