web-dev-qa-db-fra.com

Quelle est la meilleure façon de vérifier si un attribut existe et est défini?

J'ai une vue commune qui répertorie deux modèles différents. La seule différence est que lors de la définition de link_to action, l'un des modèles a un attribut link et l'autre pas. Je veux vérifier si l'attribut link existe, et si c'est le cas, vérifiez s'il est défini. J'ai ce qui suit qui fonctionne, mais je me demandais s'il y avait une meilleure façon.

%li
  - if @element.has_attribute?("link") && @element.link
    = link_to @element.title, @element.link
  - else
    = link_to @element.title, @element
28
Eric Norcross

Vous pouvez utiliser presence :

= link_to @element.title, (@element.link.presence || @element)

Ou si @element peut ne pas avoir link du tout, vous pouvez utiliser try :

= link_to @element.title, (@element.try(:link) || @element)
31
ck3g

Je crois que vous pouvez simplement faire @element.attribute? (par exemple. @element.link?) (Je suppose que nous pourrions l'appeler "attributs magiques".)

Cela vérifie

  • l'attribut existant sur le modèle
  • la valeur n'étant pas nulle

Exactement ce que vous voulez.

13
ahnbizcad

Essayez d'utiliser le hachage des attributs. Ce hachage renverra un key => value mappage de tous les attributs d'un objet activerecord.

if @element.attributes['link']
  # Here we are
else
  # default
end
8
OneChillDude