Hi David,
This is what I found with rails edge.
puts Project.find(2).to_xml(:include => {:tasks => {:include
=> :users}})
<project>
<name>pr2</name>
<created-at type="datetime">2010-06-25T03:50:57Z</created-at>
<updated-at type="datetime">2010-06-25T03:50:57Z</updated-at>
<id type="integer">2</id>
<tasks type="array">
<task>
<name>task2</name>
<project-id type="integer">2</project-id>
<id type="integer">2</id>
<users type="array">
<user>
<name>Peter</name>
<task-id type="NilClass">2</task-id>
<id type="integer">1</id>
<user-id type="NilClass">1</user-id>
</user>
<user>
<name>David</name>
<task-id type="NilClass">2</task-id>
<id type="integer">2</id>
<user-id type="NilClass">2</user-id>
</user>
<user>
<name>Bernd</name>
<task-id type="NilClass">2</task-id>
<id type="integer">3</id>
<user-id type="NilClass">3</user-id>
</user>
</users>
</task>
</tasks>
</project>
ActiveRecord::Schema.define(:version => 20100625013546) do
create_table "projects", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "tasks", :force => true do |t|
t.string "name"
t.integer "project_id"
end
create_table "tasks_users", :id => false, :force => true do |t|
t.integer "task_id", :null => false
t.integer "user_id", :null => false
end
create_table "users", :force => true do |t|
t.string "name"
end
end
class Project < ActiveRecord::Base
has_many :tasks
end
class Task < ActiveRecord::Base
belongs_to :project
has_and_belongs_to_many :users
end
class User < ActiveRecord::Base
has_and_belongs_to_many :tasks
end
# seeds.rb
task1 = Task.create!(:name => 'task1')
task2 = Task.create!(:name => 'task2')
task3 = Task.create!(:name => 'task3')
pr1 = Project.create!(:name => 'pr1')
pr2 = Project.create!(:name => 'pr2')
task2.project_id =
pr2.id
task2.save!
task2.users.create(:name => 'Peter')
task2.users.create(:name => 'David')
task2.users.create(:name => 'Bernd')