Hi Paul,

On Aug 30, 2011, at 7:28 PM, Paul wrote:
> Example:
> 
> class Project
>     include DataMapper::Resource
> 
>     has n, :tasks
> end
> 
> class Task
>     include DataMapper::Resource
>     ....
> end
> 
> Say I have object "p" (Project::Class) and object
> "association" (:tasks).   How can I determine that "association" is of
> class Task and instantiate a Task object using datamapper?

Every model (ie., class that includes DataMapper::Resource) has a 
RelationshipSet, which can be queried for any of the relationships defined for 
that model. This is done, as Jonathan pointed out, with 
Model#relationships[:relationship_name], eg.

  project_to_tasks_relationship = Project.relationships[:tasks]   # => 
<#DataMapper::Associations::OneToMany::Relationship …>

Every Relationship object represents one 'edge' of the conceptual relationship 
(it is directed/directional).

> In ActiveRecord, I can do the following:
> 
> new_object = p.class.reflect_on_association(association).klass.new
> 
> What is the Datamapper equivalent?

As I mentioned above, a Relationship represents one direction (ie., edge) 
originating at a source model, and can be queried for the target model 'at the 
other end' (in graph terms, this is the other node, connected by the edge 
represented by the Relationship object itself):

  Project.relationships[:tasks].target_model    # => Task

So to duplicate the effects of your example from ActiveRecord, you could do:

  relationship_name = :tasks
  project = Project.new
  new_task = project.model.relationships[relationship_name].target_model.new

There are also other things you can do with a Relationship, all of which can be 
found at 
https://github.com/datamapper/dm-core/blob/master/lib/dm-core/associations/relationship.rb

Hope that helps,
Emmanuel

-- 
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en.

Reply via email to