Как упорядочить результаты по атрибуту hstore в Rails 4?

Как упорядочить результаты запроса по атрибуту 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.


person dee    schedule 29.04.2013    source источник


Ответы (1)


Двойные кавычки используются для обозначения идентификаторов (таких как имена таблиц и столбцов) в PostgreSQL (и других базах данных, соответствующих стандарту). Итак, когда вы говорите:

hstore("platform")

PostgreSQL видит "platform" как имя столбца в кавычках, и, поскольку столбца platform нет, вы получите сообщение об ошибке.

Строки в стандартном SQL заключаются в одинарные кавычки, вы хотите сказать:

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

Хотя это, вероятно, все равно не удастся, hstore('platform') не имеет особого смысла, и здесь тоже не используется @>; a @> b означает

содержит ли hstore a hstore b

Если вы пытаетесь отсортировать значение ключа 'platform' в properties hstore, вам нужно использовать -> для поиска ключа 'platform' следующим образом:

.order("products.properties -> 'platform'")
person mu is too short    schedule 29.04.2013