2016-06-15 18 views
0

私はそれらの典型的なものを持っていますOrderLineItemProductです。アソシエーションの列による注文はPostgreSQLではなく、PostgreSQLで動作します

Orderは、多くはLineItemsであり、LineItemproduct_idフィールドである。

という製品表の列に基づいて、OrderLineItemをソートしようとしています。

これはMySQLデータベース上ではローカルで動作しますが、PostgreSQLを使用する本番環境では動作しません。

scope :sort_by_product_id, -> { 
    includes(:product) 
    .order("products.code asc") 
} 

エラー:私はちょうど生産のjoinsの代わりincludesが、それでも同じエラーと似て試してみました

ActionView::Template::Error (PG::SyntaxError: ERROR: syntax error at or near "products" 

LINE 1: ..._id" WHERE "line_items"."order_id" = $1 ORDER BY products... 
                  ^
: SELECT "line_items".* FROM "line_items" INNER JOIN "products" ON "products"."id" = "line_items"."product_id" WHERE "line_items"."order_id" = $1 ORDER BY products.code asc): 

答えて

0

は私に別のエラー与え

scope :sort_by_product_id, -> do 
    includes(:product).order(products: { code: :asc }) 
end 
+0

してみてください: 'ディレクションを "{:コード=>:ASCは}" は無効です。有効な指示は:[:asc、:desc、:ASC、:DESC、 "asc"、 "desc"、 "ASC"、 "DESC"] 'です。そこにハッシュを渡すことはできないようだ。 – pzin

+0

@pzin '.order(code::asc)'を試すことができますか?どのSQLを生成する? – itsnikolay

+0

@larrylvによって提案された最初のオプションとして未知の 'line_items.code'列で注文しようとしています。 – pzin

1
scope :sort_by_product_id, -> { 
    joins(:product) 
    .merge(Product.order(code: :asc)) 
} 
+0

最初に動作しなかったので、 'line_item.code'で注文しようとしました。しかし、マージオプションはうまく動作します。 – pzin

+0

@pzin他の人が混乱した場合は、最初のものを削除してください。私はあなたがこの答えを受け入れることができると思います。 :) –

関連する問題