<%if @item.rigged %>Yes<%else%>No<%end%>
Ich habe an so etwas gedacht?
if @item.rigged ? "Yes" : "No"
Aber es funktioniert nicht. Ruby hat das, ||=aber ich bin mir nicht mal sicher, wie ich das Ding benutzen soll.
<%if @item.rigged %>Yes<%else%>No<%end%>
Ich habe an so etwas gedacht?
if @item.rigged ? "Yes" : "No"
Aber es funktioniert nicht. Ruby hat das, ||=aber ich bin mir nicht mal sicher, wie ich das Ding benutzen soll.
Antworten:
Entfernen ifvonif @item.rigged ? "Yes" : "No"
Ternärer Operator hat Form condition ? if_true : if_false
s/that/not that :)
In Ruby müssen die Bedingung und der thenTeil eines ifAusdrucks entweder durch ein Ausdruckstrennzeichen (dh ;oder eine neue Zeile) oder das thenSchlüsselwort getrennt werden.
All dies würde also funktionieren:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
Es gibt auch einen bedingten Operator in Ruby, aber das ist völlig unnötig. Der Bedingungsoperator ist in C benötigt, weil es ein Operator ist: in C, ifist eine Aussage , und somit keinen Wert zurückgeben kann, wenn Sie also einen Wert zurückgeben möchten, müssen Sie etwas verwenden , das kann einen Wert zurückgeben. Und die einzigen Dinge in C, die einen Wert zurückgeben können, sind Funktionen und Operatoren. Da es unmöglich ist, ifeine Funktion in C zu erstellen, benötigen Sie einen Operator.
In Ruby ist jedoch ifein Ausdruck. Tatsächlich ist alles ein Ausdruck in Ruby, sodass bereits ein Wert zurückgegeben werden kann. Es ist nicht erforderlich, dass der bedingte Operator überhaupt existiert , geschweige denn verwendet wird.
Übrigens: Es ist üblich, Methoden zu benennen, mit denen eine Frage mit einem Fragezeichen am Ende wie folgt gestellt wird:
@item.rigged?
Dies zeigt ein weiteres Problem bei der Verwendung des bedingten Operators in Ruby:
@item.rigged? ? 'Yes' : 'No'
Es ist einfach schwer zu lesen, wenn mehrere Fragezeichen nahe beieinander liegen.
Eine Zeile, wenn:
<statement> if <condition>
Dein Fall:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
"No" unless @item.riggedum das zu verhindern!
nilanstelle von 'Yes'if item.riggedtrue zurückgibt . Einzeilige if- oder if-Anweisungen werden zurückgegeben, nilwenn die Bedingung nicht erfüllt ist.
Von dem was ich weiß
3 Einzeiler
a = 10 if <condition>Beispiel:
a = 10 if true # a = 10
b = 10 if false # b = nil
a = 10 unless <condition>Beispiel:
a = 10 unless false # a = 10
b = 10 unless true # b = nil
a = <condition> ? <a> : <b>Beispiel:
a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100
Ich hoffe, es hilft.
Sowohl die Shell- als auch die C-Einzeilenkonstrukte funktionieren (Ruby 1.9.3p429):
# Shell format
irb(main):022:0> true && "Yes" || "No"
=> "Yes"
irb(main):023:0> false && "Yes" || "No"
=> "No"
# C format
irb(main):024:0> true ? "Yes" : "No"
=> "Yes"
irb(main):025:0> false ? "Yes" : "No"
=> "No"
Andernfalls kann der Zustand mit einem ternären Bediener abgedeckt werden
@item.rigged? ? 'Yes' : 'No'
Sie können verwenden ----
(@ item.rigged)? "Ja Nein"
Wenn @ item.rigged wahr ist, wird "Ja" zurückgegeben, andernfalls wird "Nein" zurückgegeben.