]> git.openstreetmap.org Git - rails.git/blobdiff - app/models/relation_member.rb
Merge remote-tracking branch 'upstream/pull/3233'
[rails.git] / app / models / relation_member.rb
index 79102853e9c218a362a52eedd5acf30b52233e19..2de551c3f437c2b420574ca84aa58e17f9421bf3 100644 (file)
@@ -1,30 +1,26 @@
-class RelationMember < ActiveRecord::Base
-  set_table_name 'current_relation_members'
+# == Schema Information
+#
+# Table name: current_relation_members
+#
+#  relation_id :bigint(8)        not null, primary key
+#  member_type :enum             not null
+#  member_id   :bigint(8)        not null
+#  member_role :string           not null
+#  sequence_id :integer          default(0), not null, primary key
+#
+# Indexes
+#
+#  current_relation_members_member_idx  (member_type,member_id)
+#
+# Foreign Keys
+#
+#  current_relation_members_id_fkey  (relation_id => current_relations.id)
+#
 
 
-  # problem with RelationMember is that it may link to any one 
-  # object (a node, a way, another relation), and belongs_to is
-  # not flexible enough for that. So we do this, which is ugly,
-  # but fortunately rails won't actually run the SQL behind that
-  # unless someone really accesses .node, .way, or
-  # .relation - which is what we do below based on member_type.
-  # (and no: the :condition on belongs_to doesn't work here as
-  # it is a condition on the *referenced* object not the 
-  # *referencing* object!)
-  
-  belongs_to :node, :foreign_key => "member_id"
-  belongs_to :way, :foreign_key => "member_id"
-  belongs_to :relation, :foreign_key => "member_id"
+class RelationMember < ApplicationRecord
+  self.table_name = "current_relation_members"
+  self.primary_keys = "relation_id", "sequence_id"
 
 
-  # so we define this "member" function that returns whatever it
-  # is.
-  def member()
-    return (member_type == "node") ? node : (member_type == "way") ? way : relation
-  end
-
-  # NOTE - relations are SUBJECTS of memberships. The fact that nodes, 
-  # ways, and relations can be the OBJECT of a membership,
-  # i.e. a node/way/relation can be referenced throgh a
-  # RelationMember object, is NOT modelled in rails, i.e. these links
-  # have to be resolved manually, on demand. 
+  belongs_to :relation
+  belongs_to :member, :polymorphic => true
 end
 end