rails:1698
From: Kazuhiro Yoshida <moriq@m...>
Date: Mon, 09 Oct 2006 14:16:33 +0900
Subject: [rails:1698] Re: 親テーブルのカラムで、group by -> count -> order by したい
moriqです。 Takashi Hoshizawa wrote: > ActiveRecordの使い方について、質問させて下さい。 > > class User < ActiveRecord::Base > has_many :comment > end > > class Comment < ActiveRecord::Base > belongs_to :user > end > > のようなクラスがある場合に、 > > ・user別にcommenntの件数をカウントする > ・userのname順でリスト表示 > (ただしcommentがないuserは表示しない) > > をしたい時、どう書くのがActiveRecord流でしょうか? edgeだと assert_equal [ [users(:devid),1], [users(:tom),2], [users(:wilma),1] ], Comment.count(:group => :user, :order => 'users.name', :include => :user) こう書けます。 対応する log は Comment Columns (0.000000) SHOW FIELDS FROM comments SQL (0.000000) SELECT count(DISTINCT comments.id) AS count_all, user_id AS user_id FROM comments LEFT OUTER JOIN users ON users.id = comments.user_id GROUP BY user_id ORDER BY users.name User Load (0.000000) SELECT * FROM users WHERE (users.id IN (2,1,3)) こうなります。 現行のactiverecord-1.14.4だと countで:includeを指定すると:groupが効かないようです。 -- ML: rails@r... 使い方: http://QuickML.com/
1697 2006-10-09 04:34 [t_hoshizawa@m... ] 親テーブルのカラムで、group by -> count -> order by したい -> 1698 2006-10-09 07:16 ┗[moriq@m... ] 1699 2006-10-09 23:26 ┗[t_hoshizawa@m... ]