Self Reference, Almost There (I Hope!)

I'm still struggling with the self reference. I *THINK* I'm getting
close. I have the following tables:

class CreateCategories < ActiveRecord::Migration
  def self.up
    create_table :categories do |t|
    t.string :name, :limit => 40
      t.timestamps
    end
  end
end

class CreateRelationships < ActiveRecord::Migration
  def self.up
    create_table :relationships, :id => false do |t|
    t.integer :category_id
    t.integer :parent_id
    t.integer :sort_order
      t.timestamps
    end
  end
end

My models look like this:

class Relationship < ActiveRecord::Base
  belongs_to :category, :class_name => 'Category',
       :foreign_key => 'category_id'
  belongs_to :parent, :class_name => 'Category',
             :foreign_key => 'parent_id
end

class Category < ActiveRecord::Base
  has_many :relationships, :foreign_key => 'category_id'

  has_many :parents, :class_name => 'Category',
                     :through => 'relationships',
                     :source => :parent

  has_many :children, :class_name => 'Category',
                      :through => 'relationships',
                      :source => :category
end

I can create a category. When I try to add a parent to it (e.g.
c.parents << p) I get the error

ActiveRecord::HasManyThroughAssociationNotFoundError: Could not find the
association "relationships" in model Category

I'm sure that I'm missing something simple, but I don't see it. Can
anyone let me know what I'm missing?

Thanks much
---Michael

class CreateRelationships < ActiveRecord::Migration
def self.up
create_table :relationships, :id => false do |t|
t.integer :category_id
t.integer :parent_id
t.integer :sort_order
t.timestamps
end
end
end

If "relationships" is a join table, then it can't have any fields
other than the two foreign keys.

class Relationship < ActiveRecord::Base
belongs_to :category, :class_name => 'Category',
:foreign_key => 'category_id'
belongs_to :parent, :class_name => 'Category',
:foreign_key => 'parent_id
end

Right - so Relationship is an AR model - it *needs* an ID column.

There might be some other issues... but get to them after the
Relationship models are working (try creating one in the console to
make sure it works...)

<snip>

Also, you need to refer to the relationships association in the Category class as follows:

has_many :parents, :class_name => 'Category', :through => :relationships, :source => :parent

(In case there's anybody still interested :slight_smile: )