2014-03-26 7 views
14

Ich versuche, eine einzige Zeile wenn sonst Anweisung in einer Ansicht zu schreiben.Rails einzige Zeile, wenn sonst Anweisung

<%= collection.name ? collection.name : @miniature.name %> 

Ich will es collection.name setzen, wenn ein solches vorhanden ist, sonst will ich es @ miniature.name

+2

Was mit dem Code falsch sind Sie zur Verfügung gestellt? –

Antwort

22

setzen Um es noch klarer, können Sie logische verwenden OR und ActiveSupport'sObject#presence (um collection.name nur, wenn es existiert und nicht leer):

<%= collection.name.presence || @miniature.name %> 

wenn Sie collection.name angezeigt werden sollen, wenn es nicht nil ist, aber es ist leer (leere Zeichenfolge oder String-cont aining nur Leerzeichen), wird es genug sein haben:

<%= collection.name || @miniature.name %> 
+0

Dies scheint eine sehr elegante Art, es zu tun. Ich wusste nicht, dass du solche Präsenz nutzen kannst. – Ossie

+1

@WorldOfProper können Sie, weil, wenn das Objekt leer ist, 'Präsenz'' nil' zurückgibt, was in logischen Anweisungen wie 'false' behandelt wird. –

+0

Für was war dieser Downvote? Bitte geben Sie eine Erklärung. –

23

Prüfen auf das Vorhandensein von collection.name zuerst.

<%= collection.name.present? ? collection.name : @miniature.name %> 
+1

Ternärer Operator - http://stackoverflow.com/questions/1428708/remembering-the-ternary-operator-syntax –

+1

Ja, ich weiß - ich habe gerade für das OP referenziert, wenn er recherchieren wollte –

+0

'wenn nil' nicht Irgendwelche Fehler werfen, es verhält sich genau wie 'if false'. –

0

können nicht Sie haben

<%= collection.name ||= @minature.name %> 

Die, die Downvoted - Set Ruby variable if it is not already defined

+0

Sorry, ich schrieb als Konversation - lassen Sie mich ändern –

+2

Ich verstehe nicht. Dies wird nicht tun, was OP erwartet (Anzeige 'collection.name' oder' @ miniatur.name'), sondern wird tun, was OP nicht erwartet (setze 'collection.name' auf' @ miniatur.name' wenn '@collection .name' ist 'nil'). –

+0

Ich glaube, meine Antwort lieferte eine gültige Antwort auf das OP –

Verwandte Themen