Tool.select('tools.id, tools.name').search('f')
以上查询工作正常,但
Tool.select('tools.id, tools.name').group('tools.id').search('f')
产生错误
ActiveRecord::StatementInvalid: PG::GroupingError: ERROR: column
"pg_search_3aaef8932e30f4464f664f.pg_search_469c73b9b63bebacc2607f"
must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: ...xt, '')), 'D') || to_tsvector('english',
coalesce(pg_search_...
我正在使用pg_search(https://github.com/Casecommons/pg_search)gem进行全文搜索.. 我无法弄清楚即使尝试添加
的原因group("tools.id, tools.*, #{PgSearch::Configuration.alias('tools')}.rank")
如我所读,但仍有同样的错误。
构建查询的正确方法是什么?
答案 0 :(得分:0)
PG要求所有选定的字段要么出现在GROUP BY子句中,要么出现在聚合函数中(例如:max,min) - 当然,如果你正在进行任何分组。
我猜测pg_search
gem迁移在名为pg_search_469c73b9b63bebacc2607f
的表上创建了一个名为pg_search_3aaef8932e30f4464f664f
的字段,该字段是查询的一部分,但不属于GROUP BY的一部分子句。
我无法看到#{PgSearch::Configuration.alias('tools')}.rank
如何转化为pg_search_3aaef8932e30f4464f664f.pg_search_469c73b9b63bebacc2607f
尝试使用group("tools.id, tools.name, pg_search_3aaef8932e30f4464f664f.pg_search_469c73b9b63bebacc2607f")
,看看你是否摆脱了这个错误。如果有效,请尝试找一种检索pg_search_469c73b9b63bebacc2607f
字段名称的程序方法。
鉴于你的例子,假设tools.id
是唯一的,我不认为按id
分组对你有好处。如果你加入其他东西,那么它就有意义了。