2

私は2つの関係(クラス)を持っています

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}

私の目標は、返される結果でもidname の両方を取得することです。現在、またはのいずれかRecommendTypeForを返すことしかできません。このようなものidname

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

確かに、IDまたは名前を取得してそのハッシュを作成したら、SQLの別のラウンドを実行できますが、それは効率的な方法ではないと思います。ヘルプや提案に感謝します:)

4

2 に答える 2

6

個別にグループ化する必要があります。次のグループを試してください。

.group ("recommended_tor_type_id", "recommended_for_types.name").count
于 2015-08-10T16:27:55.587 に答える
-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

それが役に立てば幸い!

于 2013-04-30T10:25:58.137 に答える