2013-04-30 34 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