2016-05-10 5 views
1

Gerade jetzt, wenn ichRails Stenografie if/else Ausgabe html

<%= @inbox.automatic_reconciliation ? "<i class='fi-play-circle'></i>" : "<i class='fi-pause'></i>" %> 

Meine Ansicht verwenden spuckt den eigentlichen Code auf der Seite anstelle des Symbols aus. Ich habe versucht, einige Methoden wie .to_html und so zu verwenden, vergeblich - was vermisse ich?

Antwort

0

Versuchen Sie, die html_safe Methode zu verwenden.

<%= @inbox.automatic_reconciliation ? "<i class='fi-play-circle'></i>".html_safe : "<i class='fi-pause'></i>".html_safe %> 

documentation

0

Wenn Sie tun dies darauf bestehen, verwenden Sie die raw Helfer, die über html_safe bevorzugt wird:

<%= raw @inbox.automatic_reconciliation ? "<i class='fi-play-circle'></i>" : "<i class='fi-pause'></i>" %> 

Die bessere Lösung ist bei weitem diese Logik von Ihren Ansichten zu entfernen . Erstellen Sie eine Hilfsmethode und einfach aufrufen es:

<i class="<%= automatic_reconciliation_class %>"></i> 
+0

Warum ist bevorzugt? Außer einem Fehler, der auf "Null" erhöht wurde. Beide Ausgaben sind eine Zeichenfolge. –

+0

@ Зелёный Es ist kürzer, klarer, weniger leicht zu übersehen und löst keine Ausnahmen aus, wenn die Eingabe "Null" ist. Nein, in diesem Fall gibt es keine Chance auf eine "Null" -Eingabe, aber der Punkt ist, dass Sie auf eine Methode standardisieren sollten, und "roh" ist im allgemeinen Fall besser. 'raw' ist eine Hilfsmethode, die speziell für die Verwendung in Ihren Ansichten für genau diesen Fall vorgesehen ist. Schienen ist ein Land der Konventionen, und Sie sollten "roh" aus diesem Grund verwenden, wenn kein anderer. – meagar

0

Sie den ternären Operator es einfach machen verwenden können:

<i class="<%= @inbox.automatic_reconciliation ? "fi-play-circle" : "fi-pause" %>"></i> 

Diese den Zustand bettet direkt um den Klassennamen, die den Code bereinigt recht viel. Möglicherweise ist nur der Name der Klasse betroffen, sodass der Rest des HTML-Codes von zufälligen Änderungen isoliert ist, die in Zukunft zu Wartungsproblemen führen können.