Рефакторинг моего кода для устранения отдельных запросов к БД - PullRequest
0 голосов
/ 15 июля 2010

Вот мой существующий код.Я мог бы использовать некоторые рекомендации о том, как оптимизировать это.По сути, я не хочу запускать SQL-запрос более одного раза - self.active_item? (R).Я думаю, что вместо выполнения отдельных запросов к БД я могу получить массив всех элементов активного инвентаря пользователя (например, self.active_inventory_items), превратить его в массив предметов, а затем запросить массив, чтобы узнать, связан ли== предмет.Что ты думаешь?

    # 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

1 Ответ

1 голос
/ 15 июля 2010
def retrieve_owned_items(purchasing_item)
  if related_items = purchasing_item.related_items
    InventoryItem.all(:conditions => {:item_id => related_items.map(&:id)})
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...