I've just spent all day trying to get started with DataMapper
I've found a few gotchas:
say i have two model objects with a many to many relationship,
given two instances of those:
t = Thing.create
w = Whatever.create
creating a joining resource:
ThingWhatever.create(:thing => t, :whatever => w)
[t] == w.things #true
[w] == t.whatevers #true
#then create a second join resource from t to a new Whatever
ThingWhatever.create(:thing => t, :whatever => (w2 = Whatever.create))
[w,w2] == t.whatevers #false
I'm new to DataMapper so this was very confusing.
eventaully i discovered I could work around the problem with:
t2.reload
[w,w2] == t.whatevers #true
however, reload is not mentioned in the getting started documentation and it took me hours to figure out why it wasn't working.
It's a bit of a leaky abstraction. you can see the database through the cracks.
posted a ticket
I considered trying ActiveRecord but it smelled even leakier.
Subscribe to:
Post Comments (Atom)
I would highly recommend checking out the IRC channel #datamapper on freenode.net. There's almost always someone there, and you can get help with problems like this.
ReplyDeleteOne of the problems with documenting ORMs is that the process of using the tool is not linear. We've documented most of the public methods in isolation using YARD, but that's not enough, you need to have tutorials that walk you through common scenarios. The problem is that there are hundreds of use cases, and you could write the hundreds of tutorials and still not cover all of them.. having too much documentation is just as bad as having too little. (although I'd rather have the problem of too much than too little).
We are also working towards some more tutorials, because I will agree with you that they need more work.
The approach we've been using is to add documentation for gotchas as people new to DM find them, and then examine the API to see if it can be cleaned up to make it more straight forward. The goal is that things should just work as you'd expect them with POLS in effect (POLS = Principle of Least Surprise).