2010-01-07 7 views
2

J'ai fournisseur et patient les modèles qui sont les deux appartiennent_à contacter. Sur les formulaires de modification du fournisseur et du patient, j'utilise fields_for: contact pour afficher les champs de contact associés. Le problème est que je veux utiliser différentes règles de validation pour les objets provider.contact et patient.contact, c'est-à-dire que je veux valider la présence du prénom du contact dans le formulaire d'édition du patient, mais je ne veux pas valider la présence de first_name dans le formulaire d'édition du fournisseur.Validation personnalisée du modèle associé

J'ai essayé d'ajouter la règle de validation dynamique modèle patient:

validate :contact_first_name_blank 

def contact_first_name_blank 
    errors.add('contact[first_name]', 'can not be blank') if contact.first_name.blank? 
end 

Il ajoute un message d'erreur en cas de champ prenom vide, mais il ne hightlights pas de contact champ [prenom].

S'il vous plaît aidez-moi à résoudre ce problème, peut-être qu'il ya une meilleure façon de faire de telles validations.

Répondre

5

Vous ajoutez des erreurs au mauvais modèle. La notation entre parenthèses n'est utilisée que pour nommer les éléments de formulaire HTML, et non la structure d'erreur, qui est spécifiée par le nom de l'attribut pour autant que je sache.

validate :contact_first_name_blank 

def contact_first_name_blank 
    if (contact.first_name.blank?) 
    errors.add_to_base('Contact first name can not be blank') 
    contact.errors.add('first_name', 'can not be blank') 
    end 
end 

Les contrôles d'appel fields_for pour des erreurs sur l'objet qui lui est passé, pas d'objets parents, car il ne connaît pas ces relations.

+0

Merci, cela résout complètement mon problème. –

+0

Vous devez lui donner la coche (cliquez sur le contour d'une coche) s'il s'agit de la réponse «correcte» ou «acceptée». – jamuraa

+0

J'ai compris, merci. –

Questions connexes