Одна строка, если инструкция не работает

<%if @item.rigged %>Yes<%else%>No<%end%>

Я думал о чем-то подобном?

if @item.rigged ? "Yes" : "No" 

Но это не сработает. Ruby имеет ||=, но я даже не уверен, как использовать эту вещь.

Ответ 1

Удалите if из if @item.rigged ? "Yes" : "No"

Тернарный оператор имеет форму condition ? if_true : if_false

Ответ 2

В 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'

Это просто трудно прочитать с несколькими вопросительными знаками, которые близки друг к другу.

Ответ 3

Одна строка, если:

<statement> if <condition>

Ваш случай:

"Yes" if @item.rigged

"No" if [email protected] # or: "No" unless @item.rigged

Ответ 4

Из того, что я знаю

3 однострочных

  • a = 10 if <condition>

пример: a = 10 if true # a = 10, b = 10 if false # b = nil

  1. a = 10 unless <condition>

пример: a = 10 unless false # a = 10, b = 10 unless true # b = nil

  1. a = <condition> ? <a> : <b>

пример: a = true ? 10 : 100 # a = 10, a = false ? 10 : 100 # a = 100

Надеюсь, это поможет.

Ответ 5

Работа в однострочной конструкции оболочки и 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"

Ответ 6

если условие else можно покрыть тройным оператором

@item.rigged? ? 'Yes' : 'No'

Ответ 7

Вы можете использовать ----

(@item.rigged)? "Да": "Нет"

Если @item.rigged истинно, он вернет "Да", иначе он вернет "Нет"