ActiveRecord查询唯一has-many关联的所有第一项

时间:2012-04-12 18:42:57

标签: sql ruby-on-rails activerecord

我遇到了创建Rails ActiveRecord查询的问题,该查询通过考虑内部创建时间的唯一Activity来检索第一个Item。我还需要ItemStat中可用的值,这就是包含的原因。

当前的方法实现正在运行,但它很差,需要优化。

这是我的模拟模型:

的活动:

class Activity < ActiveRecord::Base
  has_many :items
end

档案:

class Item < ActiveRecord::Base
  belongs_to :activity
  has_one :item_stat
end

ItemStat:

class ItemStat < ActiveRecord::Base
  belongs_to :item
end

当前的工作方法(activities_id是用户可用的所有活动):

def self.first_items_by_unique_activity(activities_id, time_begin, time_end)
  items = Item.includes(:item_stat).where(:activity_id => activities_id, :created_at => time_begin..time_end)

  #make the first item unique by activity
  uniques = {}
  items.each do |item|
    identifier = item.activity_id
    uniques[identifier] = item if uniques[identifier].nil?
  end   

  uniques.values
end 

感谢任何帮助!

0 个答案:

没有答案