12
votes

Comment vérifier si un objet est nul dans une vue dans Ruby?

Je souhaite afficher une ligne de texte uniquement si un objet appelé @foo est défini. À mon avis, j'essaie quelque chose comme ceci: xxx

mais cela échoue, retourner Vous avez un objet nul quand vous ne l'attendiez pas! Je suis sûr que cela se produit à cause de la méthode New_Record? . Comment puis-je vérifier si quelque chose n'est pas un nouvel enregistrement ou nul sans causer une erreur? En PHP, il serait réalisé en demandant si (! Vide ($ foo)) mais même le vide? méthode dans les rails provoque la même erreur d'être renvoyée.

des idées?


0 commentaires

7 Réponses :


1
votes

Je vérifierais par si @foo && @ foo.id . Cela vérifie qu'il existe un objet @foo Aciverecord et veille à ce que le champ ID n'est pas vide. Si le champ ID est vide, cela signifie que ce n'est pas un enregistrement dans la base de données. Je suppose que vous utilisez le champ ID dans la table.


0 commentaires

14
votes

Que diriez-vous:

<% if !@foo.nil? && !@foo.new_record? %>
  Hello!
<% end %>


2 commentaires

Vous pourriez également très bien augmenter avec la loi de Demorgan: à moins que @ foo.nil? || @ foo.new_record?; met "bonjour! '; fin;


! FOO.NIL? fait saigner mon cerveau car il peut simplement être remplacé par foo . En faisant cela un idiome rubay très simple et courant: si @foo && !@foo.new_record?



3
votes

Vous pouvez être intéressé par ces aussi:

<%= @foo.text unless @foo.blank? %>


1 commentaires

Celles-ci ne vérifient pas si @foo est vide, mais merci pour les méthodes supplémentaires



1
votes

La manière simple est xxx


0 commentaires

1
votes

Y a-t-il une raison pour laquelle cet objet pourrait être nul quand il arrive à la vue? L'ajout parfois une logique conditionnelle comme celle-ci dans la vue peut être un signe que quelque chose pourrait être refacturé et que vous masquez simplement un problème plus important.


0 commentaires

0
votes

Je préfère beaucoup utiliser le And et Gem pour ces chèques.

if @foo.andand.id
  "Hello!"
end


0 commentaires

2
votes

Permettez-moi de jeter une autre réponse juste pour le plaisir.

unless @foo.nil? or @foo.new_record?
  "Hello"
end


0 commentaires