X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/cfbdd3f7e1c688e2c875ded9fd847fcc1c3a4caf..04cb8d488eecb69dfd0bd2958f60a9bd2c7858c2:/app/models/relation_member.rb diff --git a/app/models/relation_member.rb b/app/models/relation_member.rb index 79102853e..2de551c3f 100644 --- a/app/models/relation_member.rb +++ b/app/models/relation_member.rb @@ -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