self-referential habtm: why are my keys null?

I'm trying to set up a directional self-referential HABTM to represent an arbitrary semi-hierarchical structure; it works for any data prepopulated into the db, but when I try to create a new relationship, I just get NULLs in both key columns (or 0's if I turn on the no-null constraint).

Here are the migrations:

class CreateNodes < ActiveRecord::Migration   def self.up     create_table :nodes do |t|         t.column :name, :string     end   end

  def self.down     drop_table :nodes   end end

class CreateNodesNodes < ActiveRecord::Migration   def self.up     create_table :nodes_nodes, :id => false do |t|         t.column :parent_id, :integer         t.column :child_id, :integer     end   end

  def self.down     drop_table :nodes_nodes   end end

And here is the model:

class Node < ActiveRecord::Base    has_and_belongs_to_many :parents, :foreign_key => :child_id,                                      :association_foreign_key => :parent_id,                                      :class_name => 'Node';    has_and_belongs_to_many :children, :foreign_key => :parent_id,                                       :association_foreign_key => :child_id,                                       :class_name => 'Node'; end

I've also tried swapping the foreign and association_foreign keys around.

Any idea why this isn't working? I'm using Rails 1.2.5 on MySQL, and aside from the above code and the database.yml I haven't touched anything that "rails app" created.

ruby script/console

Loading development environment.

p = Node.new

=> #<Node:0xb7192348 @new_record=true, @attributes={"name"=>nil}>

p.name = 'parent'

=> "parent"

c = Node.new

=> #<Node:0xb714a8f4 @new_record=true, @attributes={"name"=>nil}>

c.name = 'child'

=> "child">> p.children << c => [#<Node:0xb714a8f4 @new_record=true, @attributes={"name"=>"child"}>]

p.children

=> [#<Node:0xb714a8f4 @new_record=true, @attributes={"name"=>"child"}>]

c.parents

=>

p.save

=> true

c.save

=> true

p.reload

=> #<Node:0xb7192348 @new_record_before_save=true, @children=nil, @new_record=false, @attributes={"name"=>"parent", "id"=>"1"}, @parents=nil, @errors=#<ActiveRecord::Errors:0xb71251a8 @errors={}, @base=#<Node:0xb7192348 ...>>>

p.children

=>

c.reload

=> #<Node:0xb714a8f4 @children=nil, @new_record_before_save=false, @new_record=false, @attributes={"name"=>"child", "id"=>"2"}, @parents=nil, @errors=#<ActiveRecord::Errors:0xb7124f64 @errors={}, @base=#<Node:0xb714a8f4 ...>>>

c.parents

=>

Aw, of all the . . . have to specify the keys in the association as strings, not symbols.

There should maybe be some normalization going on there, since it's not always obvious (to me, anwyay) when symbols work and when they don't...