2010-09-29 52 views
1

我創建了一份報告,查找在一段時間內發送的電子郵件數量:如果控制器的值爲零,如何顯示0?

我在視圖中顯示,如下所示:

<td><%= @emails_sent.size %></td> 

,它是在控制器如下產生:

@sent_emails = ContactEmail.all(:conditions => ['date_sent >= ? and date_sent <= ?', @monday, @friday]) 

但是有時候現在已經發送了電子郵件,這使得它爲零,這導致查看失敗。

解決這個問題的方法是這樣的,以便在「.find」方法沒有任何結果的時候「無」到0,而不是認爲它是'nil?

回答

2

當您使用@neutrino解決它可能給你一個錯誤(如果選擇爲空)在你看來,你叫

<%= @emails_sent.size %> 

原因是如果選擇是零,它返回一個'0',但在你看來你期待一個數組

你有兩個選擇

1 - 修改@neutrino代碼略有

@sent_emails = ContactEmail.all(:conditions => ['date_sent >= ? and date_sent <= ?', @monday, @friday]) || [] 

**注的[],而不是0

2 - 獲取從SQL本身的數量,鑑於擺脫.size的

歡呼

sameera

更新 - 改變Array.new爲[] #thanks @gertas

+2

'|| []'看起來更好 – gertas 2010-09-29 06:29:31

+0

@ertas,酷,我會更新我的文章 – sameera207 2010-09-29 06:41:37

2

你就不能這樣做

@sent_emails = ContactEmail.all(:conditions => ['date_sent >= ? and date_sent <= ?', @monday, @friday]) || 0 
+0

我有它,它不工作.... – Angela 2010-09-29 04:16:23

+0

哦,我有不同的錯誤,所以也許這會工作 - 好,這就是我希望能工作。 – Angela 2010-09-29 04:17:02

+0

當找不到數據時,'all'方法返回一個空數組。因此@sent_emails在任何情況下都不會設置爲0。 – 2010-09-29 07:13:05

相關問題