If you have a ‘has and belongs to many’ lookup table, chances are you don’t want it to have an ‘id’ field.
Unless otherwise specified, the Rails ‘create_table’ method in migrations automatically adds this field for you.
To force Rails not to do this, specify ”:id => false” in the declaration, as such:
create_table :friends, :id => false, :force => true do |t|
t.integer :user_id
t.integer :friend_id
t.datetime :created_at
end
There are nicer has_many :through ways to do this, but drop this into your user.rb model for a friends list (using the above friends table schema):
class User < ActiveRecord::Base
...
has_and_belongs_to_many :friends,
:class_name => 'User',
:join_table => 'friends',
:association_foreign_key => 'friend_id',
:foreign_key => 'user_id'
...
end







