好的,我一直在寻找答案,但是我一直陷在这个问题上。我正在尝试获取一组物品的最高版本。这就是我正在工作的内容,它可以捕获所有正确的项目,但不能捕获它们的最新版本。

    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。 :-)

10-07 19:53
查看更多