2010-09-29 69 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

相关问题