Rails - 带分组的最大版本

时间:2016-02-24 18:29:06

标签: mysql ruby-on-rails ruby ruby-on-rails-4 activerecord

好的,我已经找到了答案,但我一直在坚持这个问题。我试图获得一组项目的最大版本。这就是我的工作,它抓住了所有正确的项目,但没有抓住它们的最新版本。

    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有很多项目。

我尝试使用最大版本或最后一次创建的任何内容只能获取一条记录而不是每条ItemOriginal的记录

1 个答案:

答案 0 :(得分:0)

我不是肯定的,但我认为你在问,"给我所有这个项目的ItemOriginals,每一个都包含其最高版本的项目的版本。&#34 ;在这种情况下,这应该工作:

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