Rails - comment puis-je valider l'existence d'une ligne référencée par une clé étrangère
Étant donné que les "Rails de Chemin" semble être de ne pas utiliser les contraintes de clé étrangère, je suis à la recherche d'une alternative qui me permettra de valider que la ligne de la clé étrangère références existe effectivement dans le TableA avant que je enregistrer un objet dans la TableB avec table_a_id.
La seule ressource que j'ai trouvé pour ce faire jusqu'à présent (ne peut pas trouver un lien pour le blog, on a mentionné, a été daté de 2007) ne semble pas être compatible avec les Rails 3.2, donc quelqu'un peut-il suggérer une façon de le faire?
Je suis actuellement à la recherche à la création d'un programme de validation d'attribuer manuellement les attributs pertinents dans mes modèles, mais je ne peux pas savoir comment le faire avec validate_each(objet, attribut, valeur).
source d'informationauteur bdx | 2012-06-16
Vous devez vous connecter pour publier un commentaire.
Il y a un plugin qui vous aide avec ce pour belongs_to associations: Valide l'existence de. Mais, peut-être que vous pouvez ajouter votre propre validation? Que penser de quelque chose comme ceci:
simplement l'utiliser comme ci-dessous,
Il vérifie automatiquement l'existence de l'enregistrement de l'utilisateur dans la db.
J'ai eu des problèmes avec ce morceau de code:
Je devais prendre la ActiveRecord exception lorsqu'aucun enregistrement correspondant n'a été trouvé. nil? ne fonctionne pas alors qu'aucun enregistrement n'est trouvé; l'exception est levée avant le néant? est exécutée.
Ceci est utile lorsque vous utilisez non valide? assertions dans les tests unitaires.
Noter que les Rails 3.2, le validates_presence_of fonctionne exactement de la façon dont vous le souhaitez dans ce cas et que vous n'avez pas à construire une structure complexe comme les réponses ci-dessus ou utilisez la belle validates_existence_of gem.
Je n'aime pas les exceptions. J'ai résolu ce problème en faisant ceci:
Vous devez spécifier le
inverse_of
option et valider le fait que sa présence est vrai.De la Active Record Validations Guide: