从Scratch标记:标签云问题

我按照http://railscasts.com/episodes/382-tagging的说明并从Scratch构建标签系统。 一切都很好,但不是tag_cloud助手。 它在搜索tag_counts时引发数据库错误。

以下范围:

#Picture.rb class Picture < ActiveRecord::Base attr_accessible :description, :title, :tag_list has_many :taggings has_many :tags, through: :taggings #Because of the following I'm getting an error from the Posgresql (showed in "Database Error") def self.tag_counts Tag.select("tags.*, count(taggings.tag_id) as count"). joins(:taggings).group("taggings.tag_id") end end 

Application_helper.rb

 def tag_cloud(tags, classes) max = tags.sort_by(&:count).last tags.each do |tag| index = tag.count.to_f / max.count * (classes.size - 1) yield(tag, classes[index.round]) end 

数据库错误

ActiveRecord :: PicturesInvalid in Pictures #index

 PG::Error: column "tags.id" ​​should appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT tags.*, count(taggings.tag_id) as count FROM "tags" I... ^ : SELECT tags.*, count(taggings.tag_id) as count FROM "tags" INNER JOIN "taggings" ON "taggings"."tag_id" = "tags"."id" GROUP BY taggings.tag_id 

您应该按tags.id分组,和/或计数taggings.id

 Tag.select("tags.*, count(taggings.id) as count"). joins(:taggings).group("tags.id") 

您无法在查询中同时进行分组和聚合。