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:
parent
5daeb1b063
commit
328d47e506
7 changed files with 29 additions and 23 deletions
|
@ -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!
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 = []
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue