Respostas:
Remover if
deif @item.rigged ? "Yes" : "No"
O operador ternário tem forma condition ? if_true : if_false
s/that/not that
:)
No Ruby, a condição e a then
parte de uma if
expressão devem ser separadas por um separador de expressão ( ;
ou seja, uma nova linha) ou pela then
palavra - chave.
Então, tudo isso funcionaria:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
Há também um operador condicional no Ruby, mas isso é completamente desnecessário. O operador condicional é necessário em C, porque é um operador: em C, if
é uma instrução e, portanto, não pode retornar um valor; portanto, se você deseja retornar um valor, precisa usar algo que possa retornar um valor. E as únicas coisas em C que podem retornar um valor são funções e operadores e, como é impossível fazer if
uma função em C, você precisa de um operador.
Em Ruby, no entanto, if
é uma expressão. De fato, tudo é uma expressão em Ruby, portanto, ele já pode retornar um valor. Não é necessário que o operador condicional exista , muito menos usá-lo.
BTW: é usual nomear métodos que são usados para fazer uma pergunta com um ponto de interrogação no final, assim:
@item.rigged?
Isso mostra outro problema com o uso do operador condicional no Ruby:
@item.rigged? ? 'Yes' : 'No'
É simplesmente difícil de ler com os vários pontos de interrogação que se aproximam.
Uma linha se:
<statement> if <condition>
Seu caso:
"Yes" if @item.rigged
"No" if !@item.rigged # or: "No" unless @item.rigged
"No" unless @item.rigged
para impedir o!
nil
vez de 'Yes'
se item.rigged
for verdadeira. Instruções de linha única se ou a menos que retornem nil
se a condição não for atendida.
Pelo que eu sei
3 one-liners
a = 10 if <condition>
exemplo:
a = 10 if true # a = 10
b = 10 if false # b = nil
a = 10 unless <condition>
exemplo:
a = 10 unless false # a = 10
b = 10 unless true # b = nil
a = <condition> ? <a> : <b>
exemplo:
a = true ? 10 : 100 # a = 10
a = false ? 10 : 100 # a = 100
Espero que ajude.
As construções de linha única shell e C funcionam (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"
se outra condição puder ser coberta com operador ternário
@item.rigged? ? 'Yes' : 'No'
Você pode usar ----
(@ item.rigged)? "Sim não"
Se @ item.rigged for true, ele retornará 'Yes'; caso contrário, retornará 'No'