如何在Rails 4中通过hstore属性订购结果?

dee*_*dee 9 ruby postgresql ruby-on-rails hstore

如何通过hstore属性订购查询结果?

@items = Item.includes(:product).order('products.properties @> hstore("platform")')
Run Code Online (Sandbox Code Playgroud)

原因

PG::Error: ERROR:  column "platform" does not exist
LINE 1: ...oduct_id"  ORDER BY products.properties @> hstore("platform"...
Run Code Online (Sandbox Code Playgroud)

platform 是一个hstore密钥,存储在属性列中,它是一个hstore类型.

mu *_*ort 17

双引号用于引用PostgreSQL(以及遵循该标准的其他数据库)中的标识符(例如表名和列名).所以当你说:

hstore("platform")
Run Code Online (Sandbox Code Playgroud)

PostgreSQL看作"platform"是一个引用的列名,因为没有platform列,就会出错.

标准SQL中的字符串引用单引号,您想说:

.order("products.properties @> hstore('platform')")
Run Code Online (Sandbox Code Playgroud)

这可能仍然会失败,hstore('platform')没有多大意义,也没有@>在这里使用; a @> b手段

hstore是否a 包含hstoreb

如果您正在尝试对hstore 中的'platform'键值进行排序,properties那么您将要使用->这样查找'platform'键:

.order("products.properties -> 'platform'")
Run Code Online (Sandbox Code Playgroud)