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

时间:2013-04-29 17:42:27

标签: ruby-on-rails ruby postgresql hstore

如何通过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类型。

1 个答案:

答案 0 :(得分:17)

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

hstore("platform")

PostgreSQL将"platform"视为引用的列名称,因为没有platform列,您会收到错误。

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

.order("products.properties @> hstore('platform')")

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

  

hstore a是否包含hstore b

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

.order("products.properties -> 'platform'")