Fixing a bug in my foreign keys. I can now upload and download nodes and ways using JOSM in the new API.

This commit is contained in:
Shaun McDonald 2008-10-03 17:09:58 +00:00
parent 5daeb1b063
commit 328d47e506
7 changed files with 29 additions and 23 deletions

View file

@ -13,10 +13,13 @@ class NodeController < ApplicationController
def create def create
if request.put? if request.put?
node = Node.from_xml(request.raw_post, true) node = Node.from_xml(request.raw_post, true)
# FIXME remove debug
logger.debug request.raw_post
logger.debug node
if node if node
node.version = 0 node.version = 0
node.user_id = @user.id #node.changeset_id = node.changeset
node.visible = true node.visible = true
node.save_with_history! node.save_with_history!

View file

@ -12,11 +12,10 @@ class WayController < ApplicationController
way = Way.from_xml(request.raw_post, true) way = Way.from_xml(request.raw_post, true)
if way if way
if !way.preconditions_ok? unless way.preconditions_ok?
render :text => "", :status => :precondition_failed render :text => "", :status => :precondition_failed
else else
way.version = 0 way.version = 0
way.user_id = @user.id
way.save_with_history! way.save_with_history!
render :text => way.id.to_s, :content_type => "text/plain" render :text => way.id.to_s, :content_type => "text/plain"

View file

@ -5,7 +5,7 @@ class Node < ActiveRecord::Base
set_table_name 'current_nodes' set_table_name 'current_nodes'
validates_presence_of :user_id, :timestamp validates_presence_of :changeset_id, :timestamp
validates_inclusion_of :visible, :in => [ true, false ] validates_inclusion_of :visible, :in => [ true, false ]
validates_numericality_of :latitude, :longitude validates_numericality_of :latitude, :longitude
validate :validate_position validate :validate_position
@ -77,6 +77,7 @@ class Node < ActiveRecord::Base
node.version = pt['version'] node.version = pt['version']
node.lat = pt['lat'].to_f node.lat = pt['lat'].to_f
node.lon = pt['lon'].to_f node.lon = pt['lon'].to_f
node.changeset_id = pt['changeset'].to_i
return nil unless node.in_world? return nil unless node.in_world?
@ -151,7 +152,8 @@ class Node < ActiveRecord::Base
raise OSM::APIVersionMismatchError.new(new_node.version, version) raise OSM::APIVersionMismatchError.new(new_node.version, version)
end end
self.user_id = user.id # FIXME logic need looked at
self.changeset_id = user.id
self.latitude = new_node.latitude self.latitude = new_node.latitude
self.longitude = new_node.longitude self.longitude = new_node.longitude
self.tags = new_node.tags self.tags = new_node.tags
@ -173,15 +175,15 @@ class Node < ActiveRecord::Base
user_display_name_cache = {} if user_display_name_cache.nil? user_display_name_cache = {} if user_display_name_cache.nil?
if user_display_name_cache and user_display_name_cache.key?(self.user_id) if user_display_name_cache and user_display_name_cache.key?(self.changeset.user_id)
# use the cache if available # use the cache if available
elsif self.user.data_public? elsif self.changeset.user.data_public?
user_display_name_cache[self.user_id] = self.user.display_name user_display_name_cache[self.changeset.user_id] = self.changeset.user.display_name
else else
user_display_name_cache[self.user_id] = nil user_display_name_cache[self.changeset.user_id] = nil
end end
el1['user'] = user_display_name_cache[self.user_id] unless user_display_name_cache[self.user_id].nil? el1['user'] = user_display_name_cache[self.changeset.user_id] unless user_display_name_cache[self.changeset.user_id].nil?
self.tags.each do |k,v| self.tags.each do |k,v|
el2 = XML::Node.new('tag') el2 = XML::Node.new('tag')
@ -219,6 +221,4 @@ class Node < ActiveRecord::Base
@tags[k] = v @tags[k] = v
end end
end end

View file

@ -3,7 +3,7 @@ class OldNode < ActiveRecord::Base
set_table_name 'nodes' set_table_name 'nodes'
validates_presence_of :user_id, :timestamp validates_presence_of :changeset_id, :timestamp
validates_inclusion_of :visible, :in => [ true, false ] validates_inclusion_of :visible, :in => [ true, false ]
validates_numericality_of :latitude, :longitude validates_numericality_of :latitude, :longitude
validate :validate_position validate :validate_position
@ -21,7 +21,7 @@ class OldNode < ActiveRecord::Base
old_node.visible = node.visible old_node.visible = node.visible
old_node.tags = node.tags old_node.tags = node.tags
old_node.timestamp = node.timestamp old_node.timestamp = node.timestamp
old_node.user_id = node.user_id old_node.changeset_id = node.changeset_id
old_node.id = node.id old_node.id = node.id
old_node.version = node.version old_node.version = node.version
return old_node return old_node
@ -38,7 +38,7 @@ class OldNode < ActiveRecord::Base
el1['id'] = self.id.to_s el1['id'] = self.id.to_s
el1['lat'] = self.lat.to_s el1['lat'] = self.lat.to_s
el1['lon'] = self.lon.to_s el1['lon'] = self.lon.to_s
el1['user'] = self.user.display_name if self.user.data_public? el1['user'] = self.changeset.user.display_name if self.changeset.user.data_public?
self.tags.each do |k,v| self.tags.each do |k,v|
el2 = XML::Node.new('tag') el2 = XML::Node.new('tag')

View file

@ -6,7 +6,7 @@ class OldWay < ActiveRecord::Base
def self.from_way(way) def self.from_way(way)
old_way = OldWay.new old_way = OldWay.new
old_way.visible = way.visible old_way.visible = way.visible
old_way.user_id = way.user_id old_way.changeset_id = way.changeset_id
old_way.timestamp = way.timestamp old_way.timestamp = way.timestamp
old_way.id = way.id old_way.id = way.id
old_way.version = way.version old_way.version = way.version

View file

@ -3,6 +3,9 @@ class Way < ActiveRecord::Base
set_table_name 'current_ways' set_table_name 'current_ways'
validates_presence_of :changeset_id, :timestamp
validates_inclusion_of :visible, :in => [ true, false ]
belongs_to :changeset belongs_to :changeset
has_many :old_ways, :foreign_key => 'id', :order => 'version' has_many :old_ways, :foreign_key => 'id', :order => 'version'
@ -37,13 +40,14 @@ class Way < ActiveRecord::Base
end end
way.version = pt['version'] way.version = pt['version']
way.changeset_id = pt['changeset']
if create if create
way.timestamp = Time.now way.timestamp = Time.now
way.visible = true way.visible = true
else else
if pt['timestamp'] if pt['timestamp']
way.timestamp = Time.parse(pt['timestamp']) way.timestamp = Time.parse(pt['timestamp'])
end end
end end
@ -84,15 +88,15 @@ class Way < ActiveRecord::Base
user_display_name_cache = {} if user_display_name_cache.nil? user_display_name_cache = {} if user_display_name_cache.nil?
if user_display_name_cache and user_display_name_cache.key?(self.user_id) if user_display_name_cache and user_display_name_cache.key?(self.changeset.user_id)
# use the cache if available # use the cache if available
elsif self.user.data_public? elsif self.changeset.user.data_public?
user_display_name_cache[self.user_id] = self.user.display_name user_display_name_cache[self.changeset.user_id] = self.changeset.user.display_name
else else
user_display_name_cache[self.user_id] = nil user_display_name_cache[self.changeset.user_id] = nil
end end
el1['user'] = user_display_name_cache[self.user_id] unless user_display_name_cache[self.user_id].nil? el1['user'] = user_display_name_cache[self.changeset.user_id] unless user_display_name_cache[self.changeset.user_id].nil?
# make sure nodes are output in sequence_id order # make sure nodes are output in sequence_id order
ordered_nodes = [] ordered_nodes = []

View file

@ -38,7 +38,7 @@ class AddChangesets < ActiveRecord::Migration
@@conv_user_tables.each { |tbl| @@conv_user_tables.each { |tbl|
rename_column tbl, :user_id, :changeset_id rename_column tbl, :user_id, :changeset_id
#foreign keys too #foreign keys too
add_foreign_key tbl, [:changeset_id], :users, [:id] add_foreign_key tbl, [:changeset_id], :changesets, [:id]
} }
end end