X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/5506b2d9592f04800436c968055f540685efd29e..112ee9266cf30c11d9b4f9fb1711006c6143ae41:/app/models/relation.rb diff --git a/app/models/relation.rb b/app/models/relation.rb index a5d463ffb..61344bdfb 100644 --- a/app/models/relation.rb +++ b/app/models/relation.rb @@ -102,23 +102,46 @@ class Relation < ActiveRecord::Base return el1 end + + # 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... + # FIXME: rip out the fucking SQL + def self.find_for_nodes_and_ways(node_ids, way_ids) + relations = [] + + 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 + + relations # if you don't do this then it returns nil and not [] + end + + # FIXME is this really needed? def members unless @members - @members = Array.new - self.relation_members.each do |member| - @members += [[member.member_type,member.member_id,member.member_role]] - end + @members = Array.new + self.relation_members.each do |member| + @members += [[member.member_type,member.member_id,member.member_role]] + end end @members end def tags unless @tags - @tags = Hash.new - self.relation_tags.each do |tag| - @tags[tag.k] = tag.v - end + @tags = Hash.new + self.relation_tags.each do |tag| + @tags[tag.k] = tag.v + end end @tags end @@ -152,11 +175,11 @@ class Relation < ActiveRecord::Base RelationTag.delete_all(['id = ?', self.id]) tags.each do |k,v| - tag = RelationTag.new - tag.k = k - tag.v = v - tag.id = self.id - tag.save! + tag = RelationTag.new + tag.k = k + tag.v = v + tag.id = self.id + tag.save! end members = self.members @@ -164,12 +187,12 @@ class Relation < ActiveRecord::Base RelationMember.delete_all(['id = ?', self.id]) 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! + 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 old_relation = OldRelation.from_relation(self)