X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/78b440ffc1e0448f8a6d73c8821dd58634ffb475..4a5fb3b46ec8f043e52e9cdd2db7d86df0d03c82:/app/models/relation.rb diff --git a/app/models/relation.rb b/app/models/relation.rb index f74a149ec..74832a7d9 100644 --- a/app/models/relation.rb +++ b/app/models/relation.rb @@ -102,6 +102,24 @@ class Relation < ActiveRecord::Base return el1 end + def self.find_for_nodes_and_ways(node_ids, way_ids) + # collect relationships. currently done in one big block at the end; + # may need to move this upwards if people want automatic completion of + # relationships, i.e. deliver referenced objects like we do with ways... + relations = Array.new + if node_ids.length > 0 + relations += Relation.find_by_sql("select e.* from current_relations e,current_relation_members em where " + + "e.visible=1 and " + + "em.id = e.id and em.member_type='node' and em.member_id in (#{node_ids.join(',')})") + end + if way_ids.length > 0 + relations += Relation.find_by_sql("select e.* from current_relations e,current_relation_members em where " + + "e.visible=1 and " + + "em.id = e.id and em.member_type='way' and em.member_id in (#{way_ids.join(',')})") + end + end + + # FIXME is this really needed? def members unless @members @@ -141,46 +159,40 @@ class Relation < ActiveRecord::Base @tags[k] = v end - def save_with_history - begin - Relation.transaction do - t = Time.now - self.timestamp = t - self.save! - - tags = self.tags + def save_with_history! + Relation.transaction do + t = Time.now + self.timestamp = t + self.save! - RelationTag.delete_all(['id = ?', self.id]) + tags = self.tags - tags.each do |k,v| - tag = RelationTag.new - tag.k = k - tag.v = v - tag.id = self.id - tag.save! - end + RelationTag.delete_all(['id = ?', self.id]) - members = self.members + tags.each do |k,v| + tag = RelationTag.new + tag.k = k + tag.v = v + tag.id = self.id + tag.save! + end - RelationMember.delete_all(['id = ?', self.id]) + members = self.members - members.each do |n| - mem = RelationMember.new - mem.id = self.id - mem.member_type = n[0]; - mem.member_id = n[1]; - mem.member_role = n[2]; - mem.save! - end + RelationMember.delete_all(['id = ?', self.id]) - old_relation = OldRelation.from_relation(self) - old_relation.timestamp = t - old_relation.save_with_dependencies! + members.each do |n| + mem = RelationMember.new + mem.id = self.id + mem.member_type = n[0]; + mem.member_id = n[1]; + mem.member_role = n[2]; + mem.save! end - return true - rescue Exception => ex - return nil + old_relation = OldRelation.from_relation(self) + old_relation.timestamp = t + old_relation.save_with_dependencies! end end