私は Rails 3.1.3 と Ruby 1.9.2 と MySQL 5.1 で開発しています。
ユニークな関連モデルの数でモデルを注文したいと思います。これが私のコードです。
class User < ActiveRecord::Base
has_many :check_ins
.
.
end
class CheckIn < ActiveRecord::Base
belongs_to :user, :counter_cache => true
belongs_to :ski_resort, :counter_cache => true
.
.
end
class SkiResort < ActiveRecord::Base
has_many :check_ins
.
.
end
そして、チェックインしたスキー場の数でユーザーモデルを並べたいと思います。
ユーザー 1 が同じスキー場に 3 回チェックインした場合、カウントは 1 です。
<チェックイン ユーザー ID: 1, スキー リゾート ID: 1">
<チェック イン ユーザー ID: 1, スキー リゾート ID: 1">
<チェック イン ユーザー ID: 1, スキー リゾート ID: 1">
ユーザー 2 が異なるスキー場に 4 回チェックインした場合、カウントは 4 になります。
<チェックイン ユーザー ID: 2, スキー リゾート ID: 1">
<チェック イン ユーザー ID: 2, スキー リゾート ID: 2">
<チェック イン ユーザー ID: 2, スキー リゾート ID: 3">
<チェック イン ユーザー ID: 2, スキー リゾート ID: 4">
以下に書きましたが、チェックイン回数順です。
class User < ActiveRecord::Base
scope :checked_in_ski_resorts_count_ranking, lambda{
{
:joins => {:check_ins => :ski_resort},
:group => 'users.id',
:order => 'COUNT(ski_resorts.id) DESC'
}
}
# => {1 => 3, 2 => 4}
end
私が望む結果は '{2 => 4, 1 => 1}' です。
このルールによる注文のスコープをユーザー モデルに追加するにはどうすればよいですか?
よろしく。