我正试图在Postgres上使用我的Rails 3.2应用程序进行标记Railscast。除了标签云功能之外,我还有它的工作原理。但是,我通过查找基于用户创建的标记来形成标记云来添加图层。
我正在尝试调整/修改Railscast中的代码:
def self.tag_counts
Tag.select("tags.*, count(taggings.tag_id) as count").
joins(:taggings).group("taggings.tag_id")
end
但是当我运行它时,我得到PG错误:
PG::Error: ERROR: column "tags.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT tags.*, count(taggings.tag_id) a...
以下是模型的外观:
user.rb
has_many :trades
has_many :taggings, :through => :trades
has_many :tags, :through => :taggings
trade.rb
has_many :taggings
has_many :tags, :through => :taggings
tagging.rb
belongs_to :tag
belongs_to :trade
tag.rb
has_many :taggings
has_many :trades, through: :taggings
如果有人可以帮助修改查询,以便对用户的标签进行计数,这将是最受欢迎的。谢谢!
答案 0 :(得分:3)
那是因为在你使用 postgres 时,你发送的 SQLite 被用作数据库。所以问题是像 SQLite 和 MySQL 这样的数据库允许你在 Group BY 子句中添加不的字段但是 postgres 没有。
所以你有两个选择
使用以下内容替换join。
Tagging.includes(:tag).select(“taggings.tag_id,count(taggings.tag_id)as count”)。group(“taggings.tag_id”)