Hi,
Despite Josh Susser's great tutorial, I am having trouble getting my self-referential many-to-many to work properly.
I'd really appreciate it if someone could cast a quick critical eye over my simple setup. First my join-table migration sets up a source and destination column for "PaperRelationship":
... t.column :source_paper_id, :integer, :null => false t.column :destination_paper_id, :integer, :null => false ...
PaperRelationship Model to go on top of this: ... belongs_to :source_paper, :class_name => "Paper" belongs_to :destination_paper, :class_name => "Paper" ...
Then in my "Paper" model (the one which I would like to be self-referential) I have the following 4 has_manys:
has_many :paper_relationships_as_source, :foreign_key => "source_paper_id", :class_name => "PaperRelationship", :dependent => :destroy has_many :outgoing_papers, :through => :paper_relationships_as_source, :source => "source_paper" has_many :paper_relationships_as_destination, :foreign_key => "destination_paper_id", :class_name => "PaperRelationship", :dependent => :destroy has_many :incoming_papers, :through => :paper_relationships_as_destination, :source => "destination_paper"
This all seems to be fine, until I do something like
paper1.outgoing_papers << paper2
I get the MYSQL constraint error: ActiveRecord::StatementInvalid: Mysql::Error: Column 'destination_paper_id' cannot be null: INSERT INTO `paper_relationships`
Any help is, as always, greatly appreciated.
Thanks for reading,
- Nex