X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/c11d961f624cb610c4b8184d24e522b2c093d1ea..3b751f79b87699b7943e74ef1fcea1e8fdb3129f:/app/models/way.rb diff --git a/app/models/way.rb b/app/models/way.rb index 5a26e2216..09d1dafa0 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -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