简单的Rails报告一个月内的计数

时间:2013-05-22 23:23:49

标签: ruby-on-rails-3

我正在生成一个报告,其中用户选择一个月,报告显示在月份内访问该代理商的家庭数量,存储为@month。

对于访问日期,每个家庭可以使用visited_on属性进行多次访问。一个家庭可能在一个月内不止一次访问,但我只想知道当月访问了多少个不同的家庭

这是我迄今为止最好的一次拍摄:

def house_count(month)
  where(housholds.visits.visited_on.strftime('%M') == month ).count
end

这种方法在我的家庭控制器中,当然它不起作用

如何生成显示例如的报告。月:6月家庭总数:45

2 个答案:

答案 0 :(得分:0)

将代码移至Household模型:

class Household < ActiveRecord::Base

  def visits_count(month)
    visits.where("strftime('%m', visited_on) + 0 = ?", month).count
  end

end

根据this answer+ 0有助于格式化。

要尝试的其他选项,具体取决于您的数据库类型:

where("extract(month from visited_on) = ?", month)
where("MONTH(visited_on) = ?", month)

答案 1 :(得分:0)

我在问题中不清楚,但是家庭有访问权限,所以我将方法移到了访问表中并使用了:

class Visit < ActiveRecord::Base  

def self.by_month(month)
  where("select(to_char(visited_on, 'FMMonth')) = ?", month)
end

这给了我每月的访问次数 - 我仍然需要为访问表中包含的household_id添加DISTINCT,这样我就可以统计不同的家庭,以防同一家庭访问两次