X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/b527d27674f0ad4ad66075def914bde695d4d88e..62a1ec47483803a32c038fb2907afdf45a61b5ee:/app/models/way.rb diff --git a/app/models/way.rb b/app/models/way.rb index 8ae6b4084..59988d88b 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -13,7 +13,7 @@ class Way < ActiveRecord::Base has_many :way_tags, :foreign_key => 'id' has_many :containing_relation_members, :class_name => "RelationMember", :as => :member - has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation + has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation, :extend => ObjectFinder def self.from_xml(xml, create=false) begin @@ -236,13 +236,7 @@ class Way < ActiveRecord::Base # delete a way and it's nodes that aren't part of other ways, with history def delete_with_relations_and_nodes_and_history(user) - node_ids = self.nodes.collect {|node| node.id } - node_ids_not_to_delete = [] - way_nodes = WayNode.find(:all, :conditions => "node_id in (#{node_ids.join(',')}) and id != #{self.id}") - - node_ids_not_to_delete = way_nodes.collect {|way_node| way_node.node_id} - - node_ids_to_delete = node_ids - node_ids_not_to_delete + node_ids_to_delete = self.unique_nodes # delete the nodes not used by other ways node_ids_to_delete.each do |node_id| @@ -257,4 +251,19 @@ class Way < ActiveRecord::Base self.delete_with_relations_and_history(user) end + + # Find nodes that belong to this way only + def unique_nodes + node_ids = self.nodes.collect {|node| node.id } + if node_ids.length==0 then return [] end + node_ids_in_other_ways = [] + way_nodes = WayNode.find(:all, :conditions => "node_id in (#{node_ids.join(',')}) and id != #{self.id}") + node_ids_in_other_ways = way_nodes.collect {|way_node| way_node.node_id} + return node_ids - node_ids_in_other_ways + end + + # Temporary method to match interface to nodes + def tags_as_hash + return self.tags + end end