Handle segments which do not exist correctly and indicate that the
[rails.git] / app / models / way.rb
index 9658a99291a2b6655013b5c8a4df533f47bf623f..09d1dafa0adca5b320aaad2003b63c36b9d85e43 100644 (file)
@@ -61,7 +61,7 @@ class Way < ActiveRecord::Base
 
     user_display_name_cache = {} if user_display_name_cache.nil?
     
-    if user_display_name_cache and user_display_name_cache[self.user_id]
+    if user_display_name_cache and user_display_name_cache.key?(self.user_id)
       # use the cache if available
     elsif self.user.data_public?
       user_display_name_cache[self.user_id] = self.user.display_name
@@ -148,10 +148,12 @@ class Way < ActiveRecord::Base
         t = Time.now
         self.timestamp = t
         self.save!
-    
+
+        tags = self.tags
+
         WayTag.delete_all(['id = ?', self.id])
 
-        self.tags.each do |k,v|
+        tags.each do |k,v|
           tag = WayTag.new
           tag.k = k
           tag.v = v
@@ -159,10 +161,12 @@ class Way < ActiveRecord::Base
           tag.save!
         end
 
+        segs = self.segs
+
         WaySegment.delete_all(['id = ?', self.id])
-    
-        i = 0
-        self.segs.each do |n|
+
+        i = 1
+        segs.each do |n|
           seg = WaySegment.new
           seg.id = self.id
           seg.segment_id = n
@@ -185,7 +189,7 @@ class Way < ActiveRecord::Base
   def preconditions_ok?
     return false if self.segs.empty?
     self.segs.each do |n|
-      segment = Segment.find(n)
+      segment = Segment.find(:first, :conditions => ["id = ?", n])
       unless segment and segment.visible and segment.preconditions_ok?
         return false
       end