2013-04-29 46 views
7

Tôi làm cách nào để sắp xếp các kết quả truy vấn bằng thuộc tính hstore?Làm cách nào để sắp xếp các kết quả theo thuộc tính hstore trong Rails 4?

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

Nguyên nhân

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

platform là chìa khóa hstore, được lưu trữ trong cột tài sản, đó là một loại hstore.

Trả lời

17

Dấu ngoặc kép được sử dụng để trích dẫn số nhận dạng (chẳng hạn như tên bảng và cột) trong PostgreSQL (và các cơ sở dữ liệu khác theo tiêu chuẩn). Vì vậy, khi bạn nói:

hstore("platform") 

PostgreSQL thấy "platform" như một tên cột trích dẫn và vì không có platform cột, bạn nhận được một lỗi.

Strings trong SQL chuẩn được trích dẫn với dấu ngoặc kép duy nhất, bạn muốn nói:

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

này có thể sẽ vẫn thất bại, mặc dù hstore('platform') không có ý nghĩa nhiều và cũng không sử dụng @> đây; a @> b nghĩa

nào hstore a chứa hstore b

Nếu bạn đang cố gắng để sắp xếp trên giá trị của 'platform' then chốt trong properties hstore sau đó bạn muốn sử dụng để tra cứu -> phím 'platform' như sau:

.order("products.properties -> 'platform'") 
Các vấn đề liên quan