Per Postgres docs - and experimentation! ;) - specify that the DISTINCT ON clause must have a matching ORDER BY, such that the columns used in the distinct clause are the left-most in the ORDER clause. So you end up needing to do:
Model.distinct_on(:col).order(:col)
It would be nice (I think?) if this was handled automagically. (Or is this supposed to be automagically handled by AREL?)
Bonus - This plays weird with other things that apply ordering (ActiveAdmin). My guess (and hope) is that there's a way to say "no, this ordering always is left-most", so that when something like AA adds their ordering, it doesn't break the DISTINCT ON.
Per Postgres docs - and experimentation! ;) - specify that the
DISTINCT ON
clause must have a matchingORDER BY
, such that the columns used in the distinct clause are the left-most in the ORDER clause. So you end up needing to do:Model.distinct_on(:col).order(:col)
It would be nice (I think?) if this was handled automagically. (Or is this supposed to be automagically handled by AREL?)
Bonus - This plays weird with other things that apply ordering (ActiveAdmin). My guess (and hope) is that there's a way to say "no, this ordering always is left-most", so that when something like AA adds their ordering, it doesn't break the
DISTINCT ON
.