2013-04-23 65 views
1

如果條件爲假,它會返回空數組還是零? 例如:如果條件爲假,哪裏方法

@result=Result.where(:test_id=>test_id, :user_id => current_user.id).first 

如果不存在具有這樣爲test_id和USER_ID沒有結果。

我只是不明白,我認爲第一個選項,但這返回零。

回答

3

你的變量被構造成兩個部分,第一部分返回一個ActiveRecord::Relation(這是基本上陣列):

@result_array = Result.where(:test_id=>test_id, :user_id => current_user.id) 

> @result_array.class 
    => ActiveRecord::Relation 

裏面是空的(顯示爲[]),如果有沒有結果。

第二返回的第一個項目,(如果它是空數組)nil

> (1..10).first 
=> 1 

> [].first 
=> nil 

@first_or_nil = @result = @result_array.first 

我建議這些輸入型的軌道控制檯命令來看看有什麼結果。

+0

我覺得第一部分返回'ActiveRecord :: Relation' – 2013-04-23 10:38:21

+0

@Thahakp很好的一點。 – 2013-04-23 10:43:55

0

對於您的問題,您可以使用像這樣的代碼。

@result=Result.where(:test_id=>test_id).(:user_id => current_user.id).first 
+0

很抱歉,但你的回答不響應的問題,如果沒有發現什麼返回方法。 – 2013-04-23 08:04:56

+0

您可以使用@ result.count方法檢查結果。如果發現非記錄,則它給出0。 – 2013-04-23 08:06:55

+0

但由於某種原因,它返回nil而不是空數組,這種語法在其他情況下運行良好,所以這不是原因。我想知道爲什麼呢? – 2013-04-23 08:10:15

0

你的使用#bang與方法。首先! 例如:

@result=Result.where(:test_id=>test_id, :user_id => current_user.id).first! 

它應該返回的第一個元素絲毫紅寶石將在表符合「成果」。
它應該有所幫助。

+0

如果where部分找不到結果,這不會引發錯誤嗎? (而不是'nil') – 2013-04-23 09:58:01

0

您也可以使用這個簡單的查詢...

@result=current_user.results.find_by_test_id(:test_id)