2013-10-06 15 views
24

Ich habe eine gemeinsame Ansicht, die zwei verschiedene Modelle auflistet. Der einzige Unterschied besteht darin, dass beim Festlegen der Aktion link_to eines der Modelle ein link-Attribut aufweist und das andere nicht. Ich möchte überprüfen, ob das link Attribut existiert, und wenn es das tut, überprüfen Sie, ob es gesetzt ist. Ich habe folgendes, was funktioniert, aber ich habe mich gefragt, ob es einen besseren Weg gibt.Was ist der beste Weg zu prüfen, ob ein Attribut existiert und gesetzt ist?

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

Antwort

26

könnten Sie presence verwenden:

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

Oder, wenn @element nicht link überhaupt haben könnte, könnten Sie try:

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

Verwenden Sie die Attribute Hash. Dieser Hash gibt eine key => value Zuordnung aller Attribute eines ActiveRecord-Objekts zurück.

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

besser noch: '@ element.attributes.key? ('Link')' – rickyrickyrice

12

Ich glaube, Sie nur @element.attribute? tun können (zB @element.link?) (Ich nehme an, wir könnten es "magische Attribute" nennen.)

Diese Kontrollen für

  • das Attribut auf dem Modell vorhandenen
  • der Wert nicht in der nil

Genau das, was Sie wollen.

+1

Dies ist definitiv die beste Antwort IMO. Klar und prägnant. –

Verwandte Themen