[ruby] Optimierung gesucht



  • Hallo

    Habe folgende Funktion in einer Rails Anwendung. Da sie bei jeder Speicherung aufgerufen wird, würd ich sie gern optimieren. Es dauert ziemlich lange zum Speichern bei grossen Listen.

    Ich habe zwei Listen: items (bzw. self.items) und item_type_ids
    Die items Liste soll nun an die item_type_ids Liste angepasst werden, dh. neue Items erstellt, nicht mehr aktuelle gelöscht werden und alle bestehenden in beiden Listen erhalten.

    def update_items
        if item_type_ids.nil?
          # wenn keine ItemTypes ausgewählt wurden,
          # zerstören wir alle Items
          items.each do |item|
            item.destroy
          end
        else
          # es wurden ItemTypes ausgewählt, also
          # untersuchen wir alle getragenen Items
          items.each do |item|
            unless item_type_ids.include?(item.item_type.id.to_s)
              # das Item ist nicht mehr ausgewählt,
              # weg damit
              item.destroy
            end
            # es ist ausgewählt, wir tragen es aber schon
            # kein Grund es erneut zu erstellen, also
            # aus der Liste streichen
            item_type_ids.delete(item.item_type.id.to_s)
          end
          # die Liste enthält nun nur noch die Types, die wir 'anziehen'
          # sprich, für die wir ein neues Item erstellen müssen
          item_types_ids.each do |type_id|
            unless type_id.blank?
              items.create( :item_type_id => type_id )
            end
          end
          # zuletzt löschen wir die Liste
          self.item_type_ids = nil
        end
      end
    

    Premature Thanks 😃



  • <(°)))><


Anmelden zum Antworten