-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_key = %w[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
+ belongs_to :relation
+ belongs_to :member, :polymorphic => true
- # 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.
+ validates :member_role, :allow_blank => true, :length => { :maximum => 255 }, :characters => true
end