belongs_to :changeset
- has_many :old_nodes, :foreign_key => :id, :order => :version
+ has_many :old_nodes, :order => :version
has_many :way_nodes
has_many :ways, :through => :way_nodes
- has_many :node_tags, :foreign_key => :id
+ has_many :node_tags
has_many :old_way_nodes
has_many :ways_via_history, :class_name=> "Way", :through => :old_way_nodes, :source => :way
# Sanity check the latitude and longitude and add an error if it's broken
def validate_position
- errors.add_to_base("Node is not in the world") unless in_world?
+ errors.add(:base, "Node is not in the world") unless in_world?
end
#
Node.transaction do
self.lock!
check_consistency(self, new_node, user)
- way = WayNode.find(:first, :joins => :way,
- :conditions => [ "current_ways.visible = ? AND current_way_nodes.node_id = ?", true, self.id ])
- raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by way #{way.way.id}.") unless way.nil?
+ ways = Way.joins(:way_nodes).where(:visible => true, :current_way_nodes => { :node_id => id }).order(:id)
+ raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by ways #{ways.collect { |w| w.id }.join(",")}.") unless ways.empty?
- rel = RelationMember.find(:first, :joins => :relation,
- :conditions => [ "visible = ? AND member_type='Node' and member_id=? ", true, self.id])
- raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by relation #{rel.relation.id}.") unless rel.nil?
+ rels = Relation.joins(:relation_members).where(:visible => true, :current_relation_members => { :member_type => "Node", :member_id => id }).order(:id)
+ raise OSM::APIPreconditionFailedError.new("Node #{self.id} is still used by relations #{rels.collect { |r| r.id }.join(",")}.") unless rels.empty?
self.changeset_id = new_node.changeset_id
self.tags = {}
# Create a NodeTag
tags = self.tags
- NodeTag.delete_all(['id = ?', self.id])
+ NodeTag.delete_all(:node_id => self.id)
tags.each do |k,v|
tag = NodeTag.new
+ tag.node_id = self.id
tag.k = k
tag.v = v
- tag.id = self.id
tag.save!
end