Skip to content

Instantly share code, notes, and snippets.

@nengine
Created January 24, 2012 20:51
Show Gist options
  • Save nengine/1672511 to your computer and use it in GitHub Desktop.
Save nengine/1672511 to your computer and use it in GitHub Desktop.
has_many_through
DataMapper.setup(:default, {
:adapter => 'sqlserver',
:database => 'Employee',
:username => 'test',
:password => 'test',
:host => 'host12',
:port => 1433
})
DataMapper.setup(:organization, {
:adapter => 'sqlserver',
:database => 'Organization',
:username => 'test',
:password => 'test',
:host => 'host12',
:port => 1433
})
DataMapper.finalize
class Person
include DataMapper::Resource
storage_names[:default] = 'Person'
property :person_id, String, :key => true , :field => 'PersonNo'
property :index_no, String, :field => 'IndexNo'
property :last_name, String, :field => 'LastName'
property :first_name, String, :field => 'FirstName'
property :nationality, String, :field => 'Nationality'
has n, :assignments, 'Assignment' , :child_key => [ :personno ]
has n, :positions, :through => :assignments
end
class Position
include DataMapper::Resource
storage_names[:default] = 'Position'
property :position_id, Integer, :key => true, :field => 'PositionNo'
property :mission, String, :field => 'Mission'
property :mandate, String, :field => 'MandateNo'
property :function_id, String, :field => 'FunctionNo'
property :org_unit_operational, Integer, :field => 'OrgUnitOperational'
belongs_to :organization, :repository => repository(:organization), :model => 'Organization',
:parent_key => [ :orgunit ],
:child_key => [ :orgunitoperational ]
has n, :assignments, 'Assignment', :child_key => [ :positionno ]
has n, :people, :through => :assignments
end
class Assignment
include DataMapper::Resource
storage_names[:default] = 'PersonAssignment'
property :position_id, Integer, :key => true, :field => 'PositionNo'
property :person_id, String, :key => true, :field => 'PersonNo'
property :assignment_id, Integer, :key => true, :field => 'AssignmentNo'
property :start, DateTime, :field => 'DateEffective'
property :end, DateTime, :field => 'DateExpiration'
belongs_to :person, 'Person' , :child_key => [ :personno ]
belongs_to :position, 'Position', :child_key => [ :positionno ]
end
class Organization
include DataMapper::Resource
storage_names[:organization] = 'Organization'
property :orgunit, Integer, :key => true , :field => 'OrgUnit'
property :org_unit_code, String, :field => 'OrgUnitCode'
property :org_unit_name, String, :field => 'OrgUnitName'
has n, :positions, :model => 'Position', :repository => repository(:default),
:parent_key => [ :orgunit ],
:child_key => [ :orgunitoperational ]
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment