If `Node` is an `ActiveRecord` class that implements `acts_as_tree`, then fixtures would usually look like: root: id: 1 parent_id: name: Root Node child_1: id: 2 parent_id: 1 name: First Child child_1_1: id: 3 parent_id: 2 name: Sub Child 1 child_1_2: id: 4 parent_id: 2 name: Sub Child 2 child_2: id: 5 parent_id: 1 name: Second Child This gets really hard to read, and to manage with all the juggling of those ID's. Plus it's difficult, at a glace, to get a good idea of the data's structure. With Doozer, you can get a much better visualization of this kind of fixture data, and not have to manage as much tedium: Doozer.define :node do field_order :name block_affects :child=>:parent_id end node "Root Node" do node "First Child" do node "Sub Child 1" node "Sub Child 2" end node "Second Child" end This Doozer script generates the following YAML: node_1: id: 1 parent_id: name: Root Node node_2: id: 2 parent_id: 1 name: First Child node_3: id: 3 parent_id: 2 name: Sub Child 1 node_4: id: 4 parent_id: 2 name: Sub Child 2 node_5: id: 5 parent_id: 1 name: Second Child You'll notice that the names are now generated; `node_1` instead of `root`. We can specify fixture names too. If the first argument to the `node()` macro (that `Doozer.define(sym)` generates) is a `Symbol`, then it's used as the fixture's name. So, our updated Doozer fixture looks like this: node :root, "Root Node" do node :child_1, "First Child" do node :child_1_1, "Sub Child 1" node :child_1_2, "Sub Child 2" end node :child_2, "Second Child" end Now the generated fixture will be the same as our original listing. You can reference a named fixture multiple times in the same Doozer script. Each time it will collect the information sent and merge it with previous calls. So, for example, let's say we just want to show the node structure first, and then fill out the node names in a more tabular fashion. Our Doozer fixture changes to this: node :root do node :child_1 do node :child_1_1 node :child_1_2 end node :child_2 end node :root, "Root Node" node :child_1, "First Child" node :child_1_1, "Sub Child 1" node :child_1_2, "Sub Child 2" node :child_2, "Second Child" This generates the same fixture as before, only now the structure really shows through. Now let's say I've added a `created_on` field to the `Node` class. I don't really wanna go through every node in the fixture and add that info, I'd rather specify a default value for it. Doozer makes this quite easy, you just add the `defaults` to the definition block, like so: Doozer.define :node do field_order :name block_affects :child=>:parent_id defaults :created_on=>Time.now.to_s(:db) end And now, all of your generated fixtures will have `created_on` fields with the value returned from `Time.now.to_s(:db)`.