Rails - Obtenir un message d'erreur du modèle qui n'est pas une erreur de validation
J'ai donc une méthode dans un modèle de réservation appelé add_equip. Cette méthode effectue une vérification pour vous assurer que l'ajout d'une pièce d'équipement est valide (pas en conflit avec une autre réservation).
Les vérifications de travail. Si une ajoutés pièce d'équipement ne doit pas être ajoutée, elle ne l'est pas, et si elle doit il est.
Le problème est que je n'arrive pas à comprendre comment faire pour envoyer les messages sauvegardez sur le contrôleur pour être mis dans le message flash? Je sais que je dois être en manque de quelque chose ici, mais j'ai googlé pour quelques heures maintenant et ne peut pas vraiment trouver de tout des explications claires sur comment comment passer des erreurs de sauvegarder le responsable du traitement, sauf qu'ils sont des erreurs de validation.
add_equip dans reservations_controller
def add_equip
@reservation = Reservation.find(params[:id])
@addedEquip = Equip.find(params[:equip_id])
respond_to do |format|
if @reservation.add_equip(@addedEquip)
flash[:notice] = "Equipment was added"
format.html { redirect_to(edit_reservation_path(@reservation)) }
else
flash[:notice] = @reservation.errors
format.html { redirect_to(edit_reservation_path(@reservation)) }
end
end
end
add_equip dans le modèle de réservation
def add_equip equip
if self.reserved.find_by_equip_id(equip.id)
self.errors.add_to_base("Equipment Already Added")
return false
elsif !equip.is_available?(self.start, self.end)
self.errors.add_to_base("Equipment Already Reserved")
return false
else
r = Reserved.new
r.reservation = self
r.equip = equip
r.save
end
end
Toute aide serait grandement appréciée. Je sais que je suis absent quelque chose de fondamental ici.
source d'informationauteur raytiley
Vous devez vous connecter pour publier un commentaire.
À l'aide de
add_to_base
pour stocker le message d'erreur semble bien pour moi, vous avez juste besoin de comprendre comment l'obtenir dans la vue.Comment sur:
En supposant que vous allez ré-affichage du formulaire, vous pouvez également utiliser probablement:
Ou éventuellement:
Aussi, vous pouvez utiliser le flash[:error], alors vous pouvez mettre de la couleur différemment avec une classe CSS dans votre point de vue.
Je pense que je peux voir pourquoi les erreurs ne sont pas transmis à l'utilisateur.
Le problème, c'est que vous envoyez une redirection de l'utilisateur, lors de l'échec de l'action au lieu de simplement faire un rendu, cela signifie que vous perdez toutes les variables que vous avez configuré pour utiliser dans la requête. Au lieu d'ajouter des erreurs pour le flash, juste le rendu de la page d'édition et de fixer le flash sur un message normal et tout devrait bien se passer.
Par exemple:
Maintenant, vous pouvez continuer à utiliser la forme normale des aides pour l'affichage de messages d'erreur.
Aussi, juste une petite suggestion pour le code du modèle, essayez d'utiliser i18n lorsque cela est possible (y compris pour les messages flash dans le contrôleur). Bien que c'est surtout une question de préférence personnelle, il donne une logique à la maison pour tous de vos messages et de texte spécifique, et alos vous permet de créer des généraux ou des messages par défaut qui peut être modifié en un seul endroit au lieu de dupliquer le changement de multiples modèles et les contrôleurs.
par exemple.