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')

どうすればできますでしょうか。