2013-04-29 5 views
7

hstore属性を使用してクエリ結果を並べ替えるにはどうすればよいですか?Rails 4でhstore属性で結果を並べるにはどうすればよいですか?

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

platform原因

@items = Item.includes(:product).order('products.properties @> hstore("platform")') 
はhstoreの型であるプロパティ列に格納hstoreのキーです。

答えて

17

二重引用符は、PostgreSQL(および標準に準拠する他のデータベース)の識別子(テーブル名や列名など)を引用するために使用します。だからあなたが言うとき:

hstore("platform") 

PostgreSQLが引用された列名として"platform"を見て、何platform列が存在しないので、あなたがエラーを取得します。標準SQLで

文字列は単一引用符で引用されている、あなたが言いたい:これはおそらくまだかかわらず、失敗します

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

hstore('platform')はあまり意味がありませんし、どちらもここ@>を使用しないしません。 a @> b

を意味hstoreのaあなたはproperties hstoreの中'platform'キーの値を並べ替えるしようとしている場合は、あなたがルックアップする->を使用したいと思いますhstoreのb

を含みません'platform'このようなキー:

.order("products.properties -> 'platform'") 
関連する問題