Handle segments which do not exist correctly and indicate that the
[rails.git] / app / models / way.rb
index 5a26e221684fbcd7b6ac87d37bee4811c2365391..09d1dafa0adca5b320aaad2003b63c36b9d85e43 100644 (file)
@@ -3,10 +3,10 @@ class Way < ActiveRecord::Base
   
   belongs_to :user
 
-  has_many :way_segments, :foreign_key => 'id'
+  has_many :way_segments, :foreign_key => 'id', :order => 'sequence_id'
   has_many :way_tags, :foreign_key => 'id'
 
-  has_many :old_ways, :foreign_key => :id
+  has_many :old_ways, :foreign_key => 'id', :order => 'version'
 
   set_table_name 'current_ways'
 
@@ -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