2010-09-30 149 views
142
<%if @item.rigged %>Yes<%else%>No<%end%> 

我在想這樣的事情嗎?一行if語句不起作用

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

但它不起作用。紅寶石有||=但是我「米甚至不知道如何使用這些東西。

回答

317

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

三元操作符刪除if具有形式condition ? if_true : if_false

+7

我已經回到這個答案無數次的語法...謝謝! – 2014-06-26 13:56:42

+0

如果您的條件以'?'結尾可以放棄嗎?也就是說,如果條件是@ customer.sales.present?你可以放棄'?'嗎? ...別擔心。找到了一些我已經測試過的代碼。答案是'不' – 2015-01-21 05:54:46

+0

@JayKilleen你是對的。紅寶石是所有關於聰明的技巧,但它是_that_聰明(: – 2015-01-23 07:47:42

148

在Ruby中,條件和ifthen部分表達式必須由表達式分隔符(即;或換行符)或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中唯一可以返回值的是函數和運算符,並且由於在C中不可能使if成爲函數,所以需要一個運算符。

但在Ruby中,if是一個表達式。其實的一切是Ruby中的表達式,所以它已經可以返回一個值。有條件的運營商甚至不需要存在,更不用說使用它了。

BTW:這是習慣這是用來在最後問一個問題以問號命名方法,如:

@item.rigged? 

這說明另一個問題在Ruby中使用條件運算符:

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

很難用多個相互接近的問號來閱讀。

+2

+1;'''解釋。 – 2013-08-30 11:35:01

+4

謝謝。這應該被選爲最好的答案 – MostafaMV 2014-05-04 09:58:16

48

一號線如果:

<statement> if <condition> 

您的情況:

"Yes" if @item.rigged 

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

或''否「,除非@ item.rigged'防止'!' – Veger 2015-02-13 20:49:48

6

無論是外殼和C一行構建工作(紅寶石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" 
1

您可以使用----

(@item.rigged)? 「是」:「否」

如果@item。操縱是真實的,它會返回「是」,否則將返回「否」

4

如果其他條件可以覆蓋有三元運算

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

據我所知

3單行

  1. a = 10 if <condition>

例如:a = 10 if true # a = 10b = 10 if false # b = nil

  • a = 10 unless <condition>
  • 例如:a = 10 unless false # a = 10b = 10 unless true # b = nil

  • a = <condition> ? <a> : <b>
  • 例如: a = true ? 10 : 100 # a = 10a = false ? 10 : 100 # a = 100

    我希望它有幫助。