X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/c184b20f9f39ca52eac198f6154b42ee253b50a2..68637a381c5e08e26ada45718f782486db831227:/app/models/way.rb diff --git a/app/models/way.rb b/app/models/way.rb index 9658a9929..c65119235 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -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 @@ -142,50 +142,53 @@ class Way < ActiveRecord::Base @tags[k] = v end - def save_with_history - begin - Way.transaction do - t = Time.now - self.timestamp = t - self.save! - - WayTag.delete_all(['id = ?', self.id]) - - self.tags.each do |k,v| - tag = WayTag.new - tag.k = k - tag.v = v - tag.id = self.id - tag.save! - end + def save_with_history! + t = Time.now - WaySegment.delete_all(['id = ?', self.id]) - - i = 0 - self.segs.each do |n| - seg = WaySegment.new - seg.id = self.id - seg.segment_id = n - seg.sequence_id = i - seg.save! - i += 1 - end + Way.transaction do + self.timestamp = t + self.save! + end + + WayTag.transaction do + tags = self.tags - old_way = OldWay.from_way(self) - old_way.timestamp = t - old_way.save_with_dependencies! + WayTag.delete_all(['id = ?', self.id]) + + tags.each do |k,v| + tag = WayTag.new + tag.k = k + tag.v = v + tag.id = self.id + tag.save! end + end - return true - rescue - return nil + WaySegment.transaction do + segs = self.segs + + WaySegment.delete_all(['id = ?', self.id]) + + i = 1 + segs.each do |n| + seg = WaySegment.new + seg.id = self.id + seg.segment_id = n + seg.sequence_id = i + seg.save! + i += 1 + end end + + old_way = OldWay.from_way(self) + old_way.timestamp = t + old_way.save_with_dependencies! end 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