

ブログの投稿の数を日毎にカウントして集計をとりたいのですが、グループの書き方が冗長になってしまっています。

現在はこのクエリで思うような結果が得られているのですが、もう少しActiveRecordっぽく書くことは出来ませんか?  
`Post.group('DATE_FORMAT(CONVERT_TZ(created_at, "+00:00","+09:00"),
"%Y/%m/%d")').count`


CC BY-SA 3.0
2016-07-03T22:53:26.493
27310
2016-07-04T08:28:16.137
9149
question
ruby-on-rails ruby rails-activerecord
このMySQLのクエリをActiveRecordっぽく書くには


ActiveRecord ではそこまでの抽象化機能は持っていないので、あきらめてSQL文をべた書きするしかないと思います。

`where` メソッドでは AREL の `Arel::Nodes::NamedFunction`
を使って無理矢理Rubyの世界だけで完結できますが、現在のところ `group` では利用できないようです。

一見動きそうだけど **動かない** コード:

[code]

    Post.group(
      Arel::Nodes::NamedFunction.new("DATE_FORMAT", [
        Arel::Nodes::NamedFunction.new("CONVERT_TZ", [
          Post.arel_table[:created_at],
          "+00:00",
          "+09:00"
        ]),
        "%Y/%m/%d"
      ])
    ).count
    
[/code]


CC BY-SA 3.0
2016-07-04T08:28:16.137
27323
2016-07-04T08:28:16.137
76
27310
answer