2016-06-15 6 views
0

У меня есть такие типичные Order, , Product.Упорядочить по колонке ассоциации по MySQL, но не по Postgresql

Order имеет много LineItem s, и LineItem имеет поле product_id.

Я пытаюсь сортировать LineItem s в Order на основе столбца таблицы продуктов, названного code.

Итак, это работает локально, в базе данных MySQL, но не в производстве, где я использую PostgreSQL.

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

Ошибка:

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): 

Я попытался подобное с joins вместо includes но все же ошибки только в производстве.

ответ

0

попробовать

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

Это дает мне еще одну ошибку: 'Направление "{: код =>: по возрастанию}" является недопустимым. Допустимые направления: [: asc,: desc,: ASC,: DESC, «asc», «desc», «ASC», «DESC»] '. Кажется, мы не можем пройти там хэш. – pzin

+0

@pzin вы можете попробовать '.order (code:: asc)'? который sql он производит? – itsnikolay

+0

, который пытается заказать неизвестный столбец 'line_items.code' в качестве первого варианта, предложенного @larrylv. – pzin

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

Первый не работал, он пытается заказать по 'line_item.code'. Но опция слияния работает хорошо. – pzin

+0

@pzin Хорошо, удалил первый, в случае каких-либо других запутался. Я думаю, вы могли бы принять этот ответ. :) –

Смежные вопросы