Make the polymorphic relation association work properly.
authorTom Hughes <tom@compton.nu>
Sun, 22 Jun 2008 14:44:34 +0000 (14:44 +0000)
committerTom Hughes <tom@compton.nu>
Sun, 22 Jun 2008 14:44:34 +0000 (14:44 +0000)
app/models/node.rb
app/models/old_node.rb
app/models/relation.rb
app/models/tracepoint.rb
lib/geo_record.rb [moved from app/models/geo_record.rb with 94% similarity]

index 4393f25..be444bf 100644 (file)
@@ -1,8 +1,8 @@
-# The node model represents a current existing node, that is, the latest version. Use OldNode for historical nodes.
-
-class Node < GeoRecord
+class Node < ActiveRecord::Base
   require 'xml/libxml'
 
+  include GeoRecord
+
   set_table_name 'current_nodes'
   
   validates_presence_of :user_id, :timestamp
@@ -17,8 +17,8 @@ class Node < GeoRecord
   has_many :way_nodes
   has_many :ways, :through => :way_nodes
 
-  has_many :containing_relation_members, :as => :member
-  has_many :containing_relations, :through => :containing_relation_members
+  has_many :containing_relation_members, :class_name => "RelationMember", :as => :member
+  has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation
 
   # Sanity check the latitude and longitude and add an error if it's broken
   def validate_position
index 2c3e93b..891b897 100644 (file)
@@ -1,4 +1,6 @@
-class OldNode < GeoRecord
+class OldNode < ActiveRecord::Base
+  include GeoRecord
+
   set_table_name 'nodes'
   
   validates_presence_of :user_id, :timestamp
index cd2d67c..71ddc4a 100644 (file)
@@ -10,8 +10,8 @@ class Relation < ActiveRecord::Base
   has_many :relation_members, :foreign_key => 'id'
   has_many :relation_tags, :foreign_key => 'id'
 
-  has_many :containing_relation_members, :as => :member
-  has_many :containing_relations, :through => :containing_relation_members
+  has_many :containing_relation_members, :class_name => "RelationMember", :as => :member
+  has_many :containing_relations, :class_name => "Relation", :through => :containing_relation_members, :source => :relation
 
   def self.from_xml(xml, create=false)
     begin
index 8648e55..bf3cdd7 100644 (file)
@@ -1,4 +1,6 @@
-class Tracepoint < GeoRecord
+class Tracepoint < ActiveRecord::Base
+  include GeoRecord
+
   set_table_name 'gps_points'
 
   validates_numericality_of :trackid, :only_integer => true
similarity index 94%
rename from app/models/geo_record.rb
rename to lib/geo_record.rb
index ddd029a..d5604d4 100644 (file)
@@ -1,5 +1,7 @@
-class GeoRecord < ActiveRecord::Base
-  before_save :update_tile
+module GeoRecord
+  def before_save
+    self.update_tile
+  end
 
   # Is this node within -90 >= latitude >= 90 and -180 >= longitude >= 180
   # * returns true/false