has_many :containing_relation_members, :class_name => "RelationMember", :as => :member
has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation
- validates_presence_of :id, :on => :update
- validates_presence_of :changeset_id, :version, :timestamp
- validates_uniqueness_of :id
- validates_inclusion_of :visible, :in => [true, false]
- validates_numericality_of :changeset_id, :version, :integer_only => true
- validates_numericality_of :id, :on => :update, :integer_only => true
- validates_associated :changeset
+ validates :id, :uniqueness => true, :presence => { :on => :update },
+ :numericality => { :on => :update, :integer_only => true }
+ validates :version, :presence => true,
+ :numericality => { :integer_only => true }
+ validates :changeset_id, :presence => true,
+ :numericality => { :integer_only => true }
+ validates :timestamp, :presence => true
+ validates :changeset, :associated => true
+ validates :visible, :inclusion => [true, false]
scope :visible, -> { where(:visible => true) }
scope :invisible, -> { where(:visible => false) }
way
end
- # Find a way given it's ID, and in a single SQL call also grab its nodes
- #
-
- # You can't pull in all the tags too unless we put a sequence_id on the way_tags table and have a multipart key
- def self.find_eager(id)
- Way.find(id, :include => { :way_nodes => :node })
- # If waytag had a multipart key that was real, you could do this:
- # Way.find(id, :include => [:way_tags, {:way_nodes => :node}])
- end
-
# Find a way given it's ID, and in a single SQL call also grab its nodes and tags
def to_xml
doc = OSM::API.new.get_xml_doc
new_nds = (nds - old_nodes).sort.uniq
unless new_nds.empty?
- db_nds = Node.where(:id => new_nds, :visible => true)
+ # NOTE: nodes are locked here to ensure they can't be deleted before
+ # the current transaction commits.
+ db_nds = Node.where(:id => new_nds, :visible => true).lock("for share")
if db_nds.length < new_nds.length
missing = new_nds - db_nds.collect(&:id)
end
end
- # Temporary method to match interface to nodes
- def tags_as_hash
- tags
- end
-
##
# if any referenced nodes are placeholder IDs (i.e: are negative) then
# this calling this method will fix them using the map from placeholders