Select distinict on not chainable with order method

Hi.
I would like to do code refactoring:
@beers = []
Beer.all.each do |beer|
unless @beers.find{|c| c.brand_id == beer.brand_id}
@beers << beer
end
break if @beers.size > 29
end

So I achieved this by writing scope (on PostgreSQL):

scope :with_unique_brand, select(“DISTINCT ON (beers.brand_id)
beers.*”)

Using this scope alone is working correct, however chaining that scope
with order method, throws strange error:

Beer.with_unique_brand.order(“created_at”):

Beer Load (1.1ms) SELECT * FROM (SELECT DISTINCT ON
(beers.brand_id) beers.* FROM “beers”) AS id_list ORDER BY
id_list.alias_0
PGError: ERROR: column id_list.alias_0 does not exist
LINE 1: …and_id) beers.* FROM “beers”) AS id_list ORDER BY
id_list.al…
^
: SELECT * FROM (SELECT DISTINCT ON (beers.brand_id) beers.* FROM
“beers”) AS id_list ORDER BY id_list.alias_0
PGError: ERROR: column id_list.alias_0 does not exist
LINE 1: …and_id) beers.* FROM “beers”) AS id_list ORDER BY
id_list.al…
^
: SELECT * FROM (SELECT DISTINCT ON (beers.brand_id) beers.* FROM
“beers”) AS id_list ORDER BY id_list.alias_0

Any idea why?

More on this problem:
https://rails.lighthouseapp.com/projects/8994/tickets/6450-arel-generates-invalid-sql-when-using-distinct-on-in-postgresql

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs