Ruby on rails 重构我的代码以消除单独的数据库查询

Ruby on rails 重构我的代码以消除单独的数据库查询,ruby-on-rails,Ruby On Rails,这是我现有的代码。我可以在如何优化这方面提供一些指导。本质上,我不想多次运行SQL查询——self.active\u item?(r)。我想我可以做的不是单独进行DB查询,而是检索一个包含所有用户活动库存项目(例如,self.active\u inventory\u项目)的数组,将其转换为一个项目数组,然后查询该数组以查看相关的\u项目==项目。你觉得怎么样 # User has many inventory_items. # Item has many inventory_it

这是我现有的代码。我可以在如何优化这方面提供一些指导。本质上,我不想多次运行SQL查询——self.active\u item?(r)。我想我可以做的不是单独进行DB查询,而是检索一个包含所有用户活动库存项目(例如,self.active\u inventory\u项目)的数组,将其转换为一个项目数组,然后查询该数组以查看相关的\u项目==项目。你觉得怎么样

    # User has many inventory_items.
    # Item has many inventory_items.
    # InventoryItem belongs to user, item.

# in User Model
def retrieve_owned_items(purchasing_item)
  related_items = purchasing_item.related_items # returns an array of Items (related to item user is going to purchase)

  owned_items = []
  unless related_items.nil?
    related_items.each do |r| # iterate through each related item
      if self.active_item?(r) then # runs a SQL query every time to check if the related item is currently an active item in the inventory
        owned_items << InventoryItem.find_by_item_id(r.id) # create an array of related_items already owned
      end
    end
  end

  return (owned_items.blank? ? nil : owned_items)
end
#用户有许多库存项目。
#项目有许多库存项目。
#InventoryItem属于用户项。
#在用户模型中
def检索自有物品(采购物品)
related_items=purchasing_item.related_items#返回项目数组(与用户要购买的项目相关)
自有物品=[]
除非相关项目。无?
相关项。每个do | r |#迭代每个相关项
如果self.active_item?(r),则#每次运行SQL查询,以检查相关项当前是否是库存中的活动项
自有物品
def retrieve_owned_items(purchasing_item)
  if related_items = purchasing_item.related_items
    InventoryItem.all(:conditions => {:item_id => related_items.map(&:id)})
  end
end