1

ユーザーが月を選択するレポートを作成しています。レポートには、その月に代理店を訪れた世帯数が @month として保存されて表示されます。

各世帯は、訪問の日付の Visited_on 属性を持つ多数の訪問を持つことができます。世帯は月に複数回訪問する場合がありますが、月に訪問した異なる世帯の数を知りたいだけです

これはこれまでの私のベストショットです:

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

この方法は家庭用のコントローラーにあり、もちろん機能しません

たとえば、次のようなレポートを作成するにはどうすればよいですか。月: 6 月 総世帯数: 45

4

2 に答える 2

0

質問では不明確でしたが、世帯には訪問があるため、メソッドを訪問テーブルに移動して使用しました。

class Visit < ActiveRecord::Base  

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

これにより、1 か月あたりの訪問数がわかります。同じ世帯が 2 回訪問した場合に備えて、異なる世帯をカウントしているため、訪問テーブルに含まれる世帯 ID に DISTINCT を追加する必要があります。

于 2013-05-24T12:32:15.387 に答える
0

コードをHouseholdモデルに移動します。

class Household < ActiveRecord::Base

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

end

この回答によると、フォーマットに+ 0役立ちます。

データベースの種類に応じて、その他のオプションを試してください。

where("extract(month from visited_on) = ?", month)
where("MONTH(visited_on) = ?", month)
于 2013-05-23T04:10:13.933 に答える