Respuestas:
Eliminar if
deif @item.rigged ? "Yes" : "No"
El operador ternario tiene forma condition ? if_true : if_false
s/that/not that
:)
En Ruby, la condición y la then
parte de una if
expresión deben estar separadas por un separador de expresión (es decir, ;
o una nueva línea) o la then
palabra clave.
Entonces, todo esto funcionaría:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
También hay un operador condicional en Ruby, pero eso es completamente innecesario. El operador condicional es necesario en C, porque es un operador: en C, if
es una declaración y, por lo tanto, no puede devolver un valor, por lo que si desea devolver un valor, debe usar algo que pueda devolver un valor. Y las únicas cosas en C que pueden devolver un valor son funciones y operadores, y dado que es imposible hacer if
una función en C, necesita un operador.
En Ruby, sin embargo, if
es una expresión. De hecho, todo es una expresión en Ruby, por lo que ya puede devolver un valor. No hay ninguna necesidad de que el operador condicional para siquiera existen , y mucho menos usarlo.
Por cierto: es costumbre nombrar los métodos que se utilizan para hacer una pregunta con un signo de interrogación al final, como este:
@item.rigged?
Esto muestra otro problema con el uso del operador condicional en Ruby:
@item.rigged? ? 'Yes' : 'No'
Simplemente es difícil de leer con los múltiples signos de interrogación que están cerca uno del otro.
Una línea si:
<statement> if <condition>
Tu caso:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
"No" unless @item.rigged
para evitar el!
nil
lugar de 'Yes'
si item.rigged
es verdadero. Línea simple si o a menos que las declaraciones regresen nil
si no se cumple la condición.
Por lo que sé
3 líneas simples
a = 10 if <condition>
ejemplo:
a = 10 if true # a = 10
b = 10 if false # b = nil
a = 10 unless <condition>
ejemplo:
a = 10 unless false # a = 10
b = 10 unless true # b = nil
a = <condition> ? <a> : <b>
ejemplo:
a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100
Espero que ayude.
Tanto las construcciones de shell y C de una línea funcionan (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"
de lo contrario, la condición se puede cubrir con un operador ternario
@item.rigged? ? 'Yes' : 'No'
Puedes usar ----
(@ item.rigged)? "Sí No"
Si @ item.rigged es verdadero, devolverá 'Sí'; de lo contrario, devolverá 'No'