我有一個城市模型和一個商業模型。 Business belogs_to:city如何找到所有有孩子的城市?
現在我想定義一個視圖,列出只有那些有孩子的城市(在這種情況下是商業)。不應該考慮空城市(意味着仍然沒有業務的城市)。如果可能的話,清單應該按照大多數企業位居前列的方式進行排序。
我發現了這樣一個解決方案:
@cities = City.find :all,
:joins => "INNER JOIN businesses ON businesses.city_id = cities.id",
:select => "cities.*, count(businesses.id) businesses_count",
:group => "businesses.city_id HAVING businesses_count > 0",
:order => "businesses_count desc"
這工作正常(排序尚未完成),但據我瞭解,這將不使用Rails 3.1和3.2的工作(我用3.0現在) 。請參閱http://m.onkey.org/active-record-query-interface
任何人都可以讓我知道如何以Rails 3.1和3.2的方式定義我的@cities嗎?
謝謝!
@KandadaBoggu:
太好了,我非常喜歡你的答案2),謝謝!
只是評論:
我 軌道遷移產生遷移add_businesses_count_to_cities businesses_count:整數
然後我需要編輯的遷移:
class AddBusinessesCountToCities < ActiveRecord::Migration
def self.up
add_column :cities, :businesses_count, :integer, :default => 0
City.reset_column_information
City.all.each do |c|
c.update_attribute :businesses_count, c.businesses.count
end
end
def self.down
remove_column :cities, :businesses_count
end
end
這是很重要的設置默認值爲0,然後用當前的企業數量更新城市。
我還添加了counter_cache孩子(業務),如: belongs_to的:城市:counter_cache =>真
這樣,它的偉大工程。