[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
-
<(°)))><