<%if @item.rigged %>Yes<%else%>No<%end%>
Я думал о чем-то подобном?
if @item.rigged ? "Yes" : "No"
Но это не сработает. Ruby имеет ||=
, но я даже не уверен, как использовать эту вещь.
<%if @item.rigged %>Yes<%else%>No<%end%>
Я думал о чем-то подобном?
if @item.rigged ? "Yes" : "No"
Но это не сработает. Ruby имеет ||=
, но я даже не уверен, как использовать эту вещь.
Удалите if
из if @item.rigged ? "Yes" : "No"
Тернарный оператор имеет форму condition ? if_true : if_false
В Ruby условие и часть then
выражения if
должны быть разделены либо разделителем выражений (т.е. ;
, либо символом новой строки), либо ключевым словом then
.
Итак, все они будут работать:
if @item.rigged then 'Yes' else 'No' end
if @item.rigged; 'Yes' else 'No' end
if @item.rigged
'Yes' else 'No' end
В Ruby существует также условный оператор, но это совершенно необязательно. Условный оператор необходим в C, потому что он является оператором: в C, if
является оператором и, следовательно, не может вернуть значение, поэтому, если вы хотите вернуть значение, вам нужно использовать что-то, что может вернуть значение. И единственными вещами в C, которые могут вернуть значение, являются функции и операторы, и поскольку невозможно сделать if
функцию в C, вам нужен оператор.
В Ruby, однако, if
является выражением. Фактически, все это выражение в Ruby, поэтому оно уже может вернуть значение. Нет необходимости, чтобы условный оператор существовал даже, не говоря уже о его использовании.
BTW: принято называть методы, которые используются для запроса вопроса с вопросительным знаком в конце, например:
@item.rigged?
Это показывает еще одну проблему с использованием условного оператора в Ruby:
@item.rigged? ? 'Yes' : 'No'
Это просто трудно прочитать с несколькими вопросительными знаками, которые близки друг к другу.
Одна строка, если:
<statement> if <condition>
Ваш случай:
"Yes" if @item.rigged
"No" if [email protected] # or: "No" unless @item.rigged
Из того, что я знаю
3 однострочных
a = 10 if <condition>
пример: a = 10 if true # a = 10
, b = 10 if false # b = nil
a = 10 unless <condition>
пример: a = 10 unless false # a = 10
, b = 10 unless true # b = nil
a = <condition> ? <a> : <b>
пример: a = true ? 10 : 100 # a = 10
, a = false ? 10 : 100 # a = 100
Надеюсь, это поможет.
Работа в однострочной конструкции оболочки и C (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"
если условие else можно покрыть тройным оператором
@item.rigged? ? 'Yes' : 'No'
Вы можете использовать ----
(@item.rigged)? "Да": "Нет"
Если @item.rigged истинно, он вернет "Да", иначе он вернет "Нет"