在rails环境中,分组由sql count语句的多列组成

sov*_*ndy 2 sql ruby-on-rails

我有两个关系(班级)

class RecommendedForType < ActiveRecord::Base
   attr_accessible :description, :name
   has_many :recommended_for_type_restaurants
end
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

如果我打电话

 RecommendedForTypeRestaurant.get_count(1) # get stat of restaurant_id: 1
Run Code Online (Sandbox Code Playgroud)

我明白了

 {"dinner"=>1, "fast food"=>1, "lunch"=>3, "romantic dinner"=>1}
Run Code Online (Sandbox Code Playgroud)

我的目标是让双方idnameRecommendTypeFor在返回结果也是如此.目前我只能让它返回idname.像这样的东西

 {{"id" => 1, "name" => "dinner", "count" => 1}, {"id" =>2, "name" => "lunch", "count" => 3} }
Run Code Online (Sandbox Code Playgroud)

一旦我得到id或名称来创建那个哈希,我肯定可以做另一轮sql,但我认为这不是有效的方式.感谢任何帮助或建议:)

小智 6

您需要单独分组,尝试以下组.

.group ("recommended_tor_type_id", "recommended_for_types.name").count
Run Code Online (Sandbox Code Playgroud)