30 lines
1.2 KiB
Ruby
30 lines
1.2 KiB
Ruby
class RelationMember < ActiveRecord::Base
|
|
set_table_name 'current_relation_members'
|
|
|
|
# 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"
|
|
|
|
# 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.
|
|
end
|