2013-04-30 39 views
1

我有兩個關係(類)集團通過爲SQL count語句多列,在軌環境

class RecommendedForType < ActiveRecord::Base 
    attr_accessible :description, :name 
    has_many :recommended_for_type_restaurants 
end 

而且

class RecommendedForTypeRestaurant < ActiveRecord::Base 
    attr_accessible :recommended_for_type_id, :restaurant_id, :user_id 
    belongs_to :restaurant 
    belongs_to :user 
    belongs_to :recommended_for_type 

    def self.get_count(rest_id) 
    r = RecommendedForTypeRestaurant.where(restaurant_id: rest_id) 
    @result = r.includes(:recommended_for_type) 
      .select("recommended_for_type_id, recommended_for_types.name") 
      .group ("recommended_tor_type_id, recommended_for_types.name") 
      .count 
    end 

end 

如果我叫

RecommendedForTypeRestaurant.get_count(1) # get stat of restaurant_id: 1 

我得到

{"dinner"=>1, "fast food"=>1, "lunch"=>3, "romantic dinner"=>1} 

我的目標是在返回結果中同時獲得idnameRecommendTypeFor。目前我只能讓它返回idname。事情是這樣的

{{"id" => 1, "name" => "dinner", "count" => 1}, {"id" =>2, "name" => "lunch", "count" => 3} } 

我肯定可以做的又一輪SQL的,一旦我得到的ID或名稱創建一個哈希,但我認爲這不是有效的方法。感謝任何幫助或建議:)

回答

-1

我相信,如果你刪除.count末,改變select到:

.select("count(*), recommended_for_type_id, recommended_for_types.name") 

你會得到的車型陣列,將有你需要的屬性和伯爵。

你應該能夠測試出由控制檯做這樣的事情:

r = RecommendedForTypeRestaurant.where(restaurant_id: rest_id) 
@result = r.includes(:recommended_for_type) 
     .select("recommended_for_type_id, recommended_for_types.name, count(*)") 
     .group ("recommended_tor_type_id, recommended_for_types.name") 

@result.each do |r| 
    puts r.recommended_for_type_id 
    puts r.name 
    puts r.count 
end 

希望它能幫助!

5

您需要單獨分組,請嘗試以下組。

.group ("recommended_tor_type_id", "recommended_for_types.name").count 
+0

但它似乎很慢。 – 2017-10-30 10:51:22