如何通过hstore属性订购查询结果?
@items = Item.includes(:product).order('products.properties @> hstore("platform")')
原因
PG::Error: ERROR: column "platform" does not exist
LINE 1: ...oduct_id" ORDER BY products.properties @> hstore("platform"...
platform
是一个hstore密钥,存储在属性列中,它是一个hstore类型。
答案 0 :(得分:17)
双引号用于引用PostgreSQL(以及遵循该标准的其他数据库)中的标识符(例如表名和列名)。所以当你说:
hstore("platform")
PostgreSQL将"platform"
视为引用的列名称,因为没有platform
列,您会收到错误。
标准SQL中的字符串引用单引号,您想说:
.order("products.properties @> hstore('platform')")
这可能仍然会失败,hstore('platform')
没有多大意义,也没有在这里使用@>
; a @> b
表示
hstore
a
是否包含hstoreb
如果您尝试对'platform'
hstore中properties
键的值进行排序,那么您需要使用->
来查找'platform'
键像这样:
.order("products.properties -> 'platform'")