私はSELECT DISTINCT
を使用しており、結果を関連値で注文しようとする際に問題があります。 (Railsの中で)この例を見てみましょう:関連する値で `has_many through、 - > {distinct} 'のレコードを注文する
私は明確なcustomers
協会とCook
モデルがあります:私は、彼らが複数の注文を持っている場合でも、一度顧客をカウントするため
has_many :customers, -> { distinct }, through: :orders, source: :user
それは明確なのですが。
このため生成されたSQLは次のとおりです。
> cook.customers.to_sql
=> "SELECT DISTINCT \"users\".* FROM \"users\"
INNER JOIN \"orders\" ON \"users\".\"id\" = \"orders\".\"user_id\"
INNER JOIN \"meals\" ON \"orders\".\"meal_id\" = \"meals\".\"id\"
WHERE \"meals\".\"cook_id\" = 1"
これは正常に動作します!私は注文それらの顧客のの最新created_at
値によって顧客のリストを注文したい
(orders
表はmeals
を通じて関連するが、無視して自由に感じるされます)。しかし、私はこれを行うとき、私はエラーを取得:
cook.customers.order('orders.created_at DESC').to_sql
=> "SELECT DISTINCT \"users\".* FROM \"users\"
INNER JOIN \"orders\" ON \"users\".\"id\" = \"orders\".\"user_id\"
INNER JOIN \"meals\" ON \"orders\".\"meal_id\" = \"meals\".\"id \"WHERE \"meals\".\"cook_id\" = 1 ORDER BY orders.created_at DESC"
> cook.customers.order('orders.created_at DESC')
ActiveRecord::StatementInvalid: PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 1: ...eals"."id" WHERE "meals"."cook_id" = $1 ORDER BY orders.cre...
私は明示的に(私が原因has_many through
のに必要があるのはないと思う)テーブルを結合する場合であっても、これはまだ動作しません。
cook.customers.joins(:orders).order('orders.created_at DESC').to_sql
=> "SELECT DISTINCT \"users\".* FROM \"users\" INNER JOIN \"orders\" \"orders_users\" ON \"orders_users\".\"user_id\" = \"users\".\"id\" INNER JOIN \"orders\" ON \"users\".\"id\" = \"orders\".\"user_id\" INNER JOIN \"meals\" ON \"orders\".\"meal_id\" = \"meals\".\"id\" WHERE \"meals\".\"cook_id\" = 1 ORDER BY orders.created_at DESC"
手がかりはありますか?私はActiveRecordの関係を返すような解決策を探しています(sort_by
を使用していないので)。これに追加のクエリを連鎖する予定です。
ありがとうございました:)
私は 'Cook.first.customers'(または類似)を呼び出して、私のコントローラでの追加メソッドを呼び出すことなく、意図した結果を得ることができるようにしたいと思いますので、おかげで、これはしかし、それほど最適ではありません。 – djfdev