0

Dans un processus, je voudrais valider que l'instruction fournie renvoie true.Validation personnalisée sur une ligne

J'ai essayé les éléments suivants:

validate :home, Proc.new { |c| c.home.kitchen.present? } 

Il ne fonctionne pas. Il ne montre pas d'erreurs de validation lorsqu'il n'y a pas de cuisine.

Dois-je écrire comme ceci:

validate :home_kitchen_must_be_present 

def home_kitchen_must_be_present 
    .... 

Ou est-il une syntaxe disponible pour l'écrire dans une ligne? Merci

+0

Quelle version Rails utilisez-vous? –

+0

Tout d'abord, vous devez ajouter une erreur à l'objet pour l'invalider. Deuxièmement, que sont «la maison» et «cuisine» ici? Les validations sont pour les attributs (colonnes en db). Sont ces deux attributs différents de votre modèle? Peut-être que vous pouvez nous montrer votre schéma et expliquer plus ce que vous voulez réaliser ici. – EJ2015

+0

Je recommande d'afficher vos associations de modèles et/ou votre schéma. Il semble que vous essayez de vérifier qu'un objet imbriqué est présent lors de l'ajout/de la mise à jour d'un objet principal qui nécessiterait probablement une méthode de validation personnalisée. Si la cuisine est la colonne à l'intérieur de la table, alors c'est une boîte de vers différente. Nous avons juste besoin de savoir avec quoi tu travailles. –

Répondre

0

Utiliser proc

valident: la maison, la présence: true, si: Proc.new {| c | c.home.kitchen.present? }

en utilisant une méthode:

validates :home, presence: true, if: :home_kitchen_must_be_present 

def home_kitchen_must_be_present 
    true # do your checking and return true or false 
end 
+0

'validates' est pour les validateurs de Rails (et les classes de validateurs personnalisées se terminant avec Validator si c'est ce que vous voulez), et' validate' est pour vos méthodes de validation personnalisées. –

+0

@ Зелёный Je connais la différence entre valider et valider. Maintenant, quel est le problème avec mon code quand il peut réaliser ce qu'il veut? – krishnar

+0

'validates: home, si: ...' ne fonctionne pas et déclenche une erreur, car il nécessite au moins un validateur, comme 'presence' ou' length' ou autre. 'validates: home, presence: true, si: ...' cela fonctionne. Vérifiez votre code. Lisez les guides http://guides.rubyonrails.org/active_record_validations.html –