Frage

Wie kann ich das erreichen?

<% for agent in @broker.agents %>
  ...
  <% if agent.cell %><span class="cell-number">Cell: <%= agent.cell %></span><% end %>
  ...
<% end %>

Ich möchte zu sehen, testen, ob der Agent eine Zellzahl hat, und wenn ja, zeigen, was innerhalb des bedingten ist. Was ich habe, scheint derzeit nicht zu arbeiten; es zeigt nur "Cell:".

Die Gedanken?

War es hilfreich?

Lösung

Dies ist, was Sie gefragt:

<% for agent in @broker.agents %>
  <% unless agent.cell.blank? %>
    <span class="cell-number">Cell: <%= agent.cell %></span>
  <% end %>
<% end %>

Die Zelle? Methode funktioniert, ob Zelle gleich Null oder eine leere Zeichenfolge ist. Rails fügt ähnliche Funktionen für alle Active Attribute. Dies wird ein wenig schöner aussehen:

<% for agent in @broker.agents %>
  <span class="cell-number">
    Cell: <%= agent.cell? ? "none given" : agent.cell %>
  </span>
<% end %>

Das Fragezeichen und Doppelpunkt schnell bilden „wenn dann:? Else“ Anweisung. Es gibt zwei Fragezeichen im Code oben, weil ein Teil der Methodenname Zelle ist? und der andere ist ein Teil der if / then / else Konstruktion.

Andere Tipps

ich auf diese Frage eine sehr ausführliche Antwort geben werde „ Wie kann ich überprüfen, ob eine Spalte einen Wert hat? “.

Zunächst einmal ist es wichtig zu beachten, dass ein Attribut vier Arten von Werten in ihm haben kann.

  1. nil Wert heißt "Null" in der Datenbank gespeichert
  2. leer Wert heißt "" eine leere Zeichenfolge mit keine Leerzeichen
  3. leer string mit Leerzeichen "".
  4. Wert in Datenbank d.h eine nicht leere Zeichenfolge .

Hier ist das Detail Verhalten aller vorliegenden Verfahren (Rubin 2.2.2), die in diesem Fall verwendet werden könnten.

Erste Methode: .empty?

  1. nil value => Löst eine Ausnahme aus

    2.2.2 :037 > object.attribute
    => nil
    2.2.2 :025 > object.attribute.empty?
    NoMethodError: undefined method `empty?' for nil:NilClass
    
  2. leer Wert heißt "" eine leere Zeichenfolge mit keine Leerzeichen

    2.2.2 :037 > object.attribute
    => ""
    2.2.2 :025 > object.attribute.empty?
    true
    
  3. leer string mit Leerzeichen "".

    2.2.2 :041 > object.attribute
    => " " 
    2.2.2 :042 > object.attribute.empty?
    => false
    
  4. Wert in Datenbank d.h eine nicht leere Zeichenfolge .

    2.2.2 :045 > object.attribute
     => "some value" 
    2.2.2 :046 > object.attribute.empty?
     => false 
    

Zweite Methode: .nil?

  1. nil Wert heißt "Null" in der Datenbank gespeichert

    2.2.2 :049 > object.attribute
     => nil 
    2.2.2 :050 > object.attribute.nil?
     => true
    
  2. leer Wert heißt "" eine leere Zeichenfolge mit keine Leerzeichen

    2.2.2 :053 > object.attribute
     => "" 
    2.2.2 :054 > object.attribute.nil?
     => false 
    
  3. leer string mit Leerzeichen "".

    2.2.2 :057 > object.attribute
     => " " 
    2.2.2 :058 > object.attribute.nil?
     => false 
    
  4. Wert in Datenbank d.h eine nicht leere Zeichenfolge .

    2.2.2 :061 > object.attribute
     => "some value" 
    2.2.2 :062 > object.attribute.nil?
     => false
    

Dritte Methode: .blank?

  1. nil Wert heißt "Null" in der Datenbank gespeichert

    2.2.2 :065 > object.attribute
     => nil 
    2.2.2 :066 > object.attribute.blank?
     => true
    
  2. leer Wert heißt "" eine leere Zeichenfolge mit keine Leerzeichen

    2.2.2 :069 > object.attribute
     => "" 
    2.2.2 :070 > object.attribute.blank?
     => true 
    
  3. leer string mit Leerzeichen "".

    2.2.2 :073 > object.attribute
     => " " 
    2.2.2 :074 > object.attribute.blank?
     => true 
    
  4. Wert in Datenbank d.h eine nicht leere Zeichenfolge .

    2.2.2 :075 > object.attribute
     => "some value" 
    2.2.2 :076 > object.attribute.blank?
     => false 
    

Viertes Verfahren: .present?

  1. nil Wert heißt "Null" in der Datenbank gespeichert

    2.2.2 :088 > object.attribute
     => nil 
    2.2.2 :089 > object.attribute.present?
     => false
    
  2. leer Wert heißt "" eine leere Zeichenfolge mit keine Leerzeichen

    2.2.2 :092 > object.attribute
     => "" 
    2.2.2 :093 > object.attribute.present?
     => false
    
  3. leer string mit Leerzeichen "".

    2.2.2 :096 > object.attribute
     => " " 
    2.2.2 :097 > object.attribute.present?
     => false 
    
  4. Wert in Datenbank d.h eine nicht leere Zeichenfolge .

    2.2.2 :100 > object.attribute
     => "some value" 
    2.2.2 :101 > object.attribute.present?
     => true 
    

Sie können entweder von den vier verwenden, abhängig von der Situation, die Sie stellen.

Danke

if !agent.cell.blank?

Es funktioniert.

agent.cell? scheint die gleichen wie agent.cell.blank zu arbeiten? in RoR.

<% @broker.agents.each do |agent| %>
  ...
  <% unless agent.cell.empty? %>
    <span class="cell-number">Cell: <%= agent.cell %></span>
  <% end %>
  ...
<% end %>

Ich finde die Verwendung von #each, unless und cell.empty? werden besser lesbar und leichter auf den ersten Blick zu verstehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top