Rails 3つのテーブルを結合後の抽出について
Rails、SQLは初心者なのでわかりづらい表現があったらすみません。
まず次のモデルを持っています。
class City < ActiveRecord::Base
has_many :favorites
has_many :users, through: :favorites
has_many :areas
has_many :countries, through: :areas
end
class Favorite < ActiveRecord::Base
belongs_to :user
belongs_to :city
end
class User < ActiveRecord::Base
has_many :favorites
has_many :citys, through: :favorites
end
class Area < ActiveRecord::Base
belongs_to :city
belongs_to :country
end
class Country < ActiveRecord::Base
has_many :areas
has_many :citys, through: :areas
end
Cityモデルを中心にFavoriteモデルがUserモデルとの中間テーブル。AreaモデルがCountryモデルとの中間テーブルです。
CityモデルとCountryモデルで合致するものを抽出し、その抽出したものをCityモデルがFavoriteモデルに登録されている数が多い順で並び替えたいです。
例えばCountryモデルの「America」で抽出したもの並び替えたい場合に下のように書いてみましたがうまくいきません。
@city = City.includes(:countries).joins(:favorites).group(:city_id).where("name = ?", "America").order('count(city_id) desc')
どうすればできますでしょうか。