好的,我一直在寻找答案,但是我一直陷在这个问题上。我正在尝试获取一组物品的最高版本。这就是我正在工作的内容,它可以捕获所有正确的项目,但不能捕获它们的最新版本。
def index
@project = Project.find(params[:project_id])
@items = Item.group(:original_id).where(original_id: ItemOriginal.select("id").where(:project_id => @project.id))
end
一个项目有很多ItemOriginals,而ItemOriginals有很多Item。
我尝试使用max version或last created_at进行的任何操作仅捕获一个记录,而不是每个ItemOriginal的记录
最佳答案
我不是很肯定,但是我想你是在问:“把这个项目的所有ItemOriginals给我,在每个项目上都包含其版本最高的Item的版本。”在这种情况下,这应该起作用:
@items = @project.item_originals.select("item_originals.*, (SELECT MAX(version) FROM items i WHERE i.item_original_id = item_originals.id) AS max_version")
然后在每个项目上都可以获取其
max_version
:- @items.each do |item|
= item.max_version
如果需要整个项目,而不仅是版本,则应切换到Postgres并使用
LATERAL JOIN
。 :-)