join tables, must they be created manually?

All table must be created manually or (preferably) in a migration. By default (name conventings can be configured to some extent), habtm expects a table named recipes_tags (alphabetical order) with a recipe_id field and a tag_id field AND NOTHING ELSE.

So if you are creating it in a migration, you have to make sure you don't get an id field. It's easy for that to happen since migrations add it silently by default. You will want to add :id => false when you call create_table in the migration

It's hard to believe they would overlook something that obvious. They don't define the join table where they define the other tables?