Ano, to máte pravdu, ale Rails pracují i s databázemi, které cizí tuto integritu neumějí. Každá to navíc dělá trochu jinak, takže právě proto se to definuje až v modelu.
V příkladech pouze ukazuji, že jde o cizí klíč, ale vlastně to není nutné. Někde na stránkách rails jsem četl, že vzhledem k Don't Repeat Yourself principu by definice integrity na dvou místech byla opakováním :-)
Jinak z has_many, atd. mám občas mžitky taky, teda spíš z objektového přístupu k db, který občas přinese "odlišné ovoce". Zjistil jsem, že databáze musím navrhovat nikoli jak jsem byl zvyklý, ale z pohledu rails, ačkoli bych to občas dělal jinak.