How to model Bill of Materials (BOM) associations?

I just finished reading Josh Susser's "Self-referential has_many :through associations" articles at: http://blog.hasmanythrough.com/articles/2006/04/21/self-referential-through. I'm having a little trouble trying to figure out how to do the same to model a bill of materials. Here is the table structure I'm starting with:

create_table :items do |t|   t.column :item_number, :string   t.column :description, :string   ... and plenty more fields end

create_table :bom_items do |t|   t.column :parent_id, :integer, :null => false   t.column :child_id, :integer, :null => false   t.column :find_number, :string   t.column :quantity, :float   t.column :notes, :string end

I'm fairly certain the proper way to model the bom_item associations is like this:

class BomItem < ActiveRecord::Base   belongs_to :parent, :foreign_key => "parent_id", :class_name => "Item"   belongs_to :child, :foreign_key => "child_id", :class_name => "Item" end

So when I have a bom_item I can use bom_item.parent to return the parent Item, and I can use bom_item.child to return the child Item. That's simple and straight forward enough. What I'm having problems with, however, is trying to figure out how to designate the associations on the Item model. Here is what I'd like to be able to do on the Item model.

1) call item.bom_items and retrieve a collection of BomItem objects 2) call item.children and retrieve a collection of Item objects 3) call item.where_used and retrieve a collection of Item objects (basically look up the child_id in the bom_items table and return the associated parent Item)

Now I think I have 1 and 2 figured out. Basically I'm thinking this should work (although I haven't tested it yet):

class Item < ActiveRecord::Base   has_many :bom_items, :foreign_key => 'parent_id', :class_name => 'Item'   has_many :children, :through => :bom_items end

So I have two questions. Is the above the correct way to model the associations needed for 1 and 2, and how do I model the associations needed for number 3?

Thanks,

JB