2013-04-29 4 views
7

Come posso ordinare i risultati della query con un attributo hstore?Come posso ordinare i risultati per l'attributo hstore in Rails 4?

@items = Item.includes(:product).order('products.properties @> hstore("platform")') 

cause

PG::Error: ERROR: column "platform" does not exist 
LINE 1: ...oduct_id" ORDER BY products.properties @> hstore("platform"... 

platform è una chiave hstore, memorizzato nella colonna proprietà, che è un tipo hstore.

risposta

17

Le virgolette doppie vengono utilizzate per indicare gli identificatori (come i nomi di tabelle e colonne) in PostgreSQL (e altri database che seguono lo standard). Quindi, quando si dice:

hstore("platform") 

PostgreSQL vede "platform" come un nome di colonna citato e dal momento che non v'è nessuna colonna platform, si ottiene un errore.

stringhe in SQL standard sono quotati con virgolette singole, si vuole dire:

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

Questo sarà probabilmente ancora fallire, però, hstore('platform') non ha molto senso e nemmeno usando @> qui; a @> b significa

fa il hstore a contengono la hstore b

Se stai cercando di risolvere il valore della chiave 'platform' nel properties hstore allora che ci si vuole utilizzare -> per ricerca la chiave 'platform' in questo modo:

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