我想將此查詢轉換為活動記錄陳述句,以便以更可靠的方式完成作業,盡管它可以按原樣執行ActiveRecord::Base.connection.execute
一直在努力實作它,對此的任何幫助將不勝感激!
使用新的 postgresql 查詢進行編輯以翻譯:
SELECT DISTINCT ON (p.id) b.id
FROM boxes AS b
INNER JOIN stones AS s
ON s.id = b.stone_id
INNER JOIN papers AS p
ON p.id = s.paper_id
ORDER BY p.id, b.created_at DESC
或者這個是等價的,但我認為翻譯起來更復雜:
with x as (
select row_number() over (partition by p.id order by b.created_at desc)
as rn,b.id as id_box,p.id as id_paper
from boxes b join stones s on b.stone_id = s.id
join papers p on p.id = s.paper_id)
select x.id_box from x where rn = 1
uj5u.com熱心網友回復:
distinct onActiveRecord 中的專用方法不支持,因此您必須更詳細:
Box
.select('distinct on (papers.id) boxes.id')
.joins(:stones)
.joins(:papers)
.order('papers.id, boxes.created_at DESC')
Box,當然只有在您正確設定 ActiveRecord 模型和關聯時才有效joins(:stones)。joins(:papers)根據您在模型中設計關聯的方式,您可能需要在joins. 遵循通用 Rails 約定時,陳述句其他部分中的表名應始終為復數形式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/444833.html
標籤:轨道上的红宝石 红宝石 PostgreSQL rails-activerecord ruby-on-rails-6
上一篇:在jar中加載影像/檔案
