Dies funktioniert, weil Sie "Convention over Configuration" folgen.
Wenn Sie angeben, dass ein Kundenmodell viele Aufträge hat, erwartet rails, dass in der Auftragstabelle ein customer_id-Feld vorhanden ist.
Wenn Sie diesen Konventionen gefolgt sind, dann werden Rails diese verwenden und in der Lage sein, die notwendige SQL zu erstellen, um alle Bestellungen für einen bestimmten Kunden zu finden.
Wenn Sie sich die Entwicklung.log-Datei ansehen, wenn Sie Ihre Anwendung entwickeln, werden Sie in der Lage sein, das benötigte SQL zu sehen, um alle Aufträge für einen bestimmten Kunden auszuwählen.
Rails erstellt keine Tabellen, ohne dass Sie danach gefragt werden. Die Erstellung von Tabellen wird durch das Generieren einer Migration erreicht, die Tabellen für Sie erstellt/ändert. Die Tatsache, dass Sie ein Kundenmodell erstellen und darin angeben, dass es has_many: orders enthält, erstellt keine Auftragstabelle. Sie müssen dies innerhalb einer Migration für sich selbst tun, um eine Auftragstabelle zu erstellen. Innerhalb dieser Migration müssen Sie entweder eine Spalte "customer_id" hinzufügen oder mithilfe der Anweisung "belongs_to: customer" das Feld "customer_id" zur Tabelle "orders" hinzufügen.
Wenn ich also eine "has_and_belongs_to_many" -Beziehung haben möchte, wie soll ich die Tabelle benennen (damit Rails sie verwenden kann), die die zwei Fremdschlüssel enthält? – GeekJock
Die Dokumentation ist eine große Ressource hierfür: http://tinyurl.com/cnfm24 Um zu paraphrasieren, ist die Konvention für die Join-Tabelle die Mehrzahl von jedem, in lexikalischer Reihenfolge. Für Master- und Pet-Modelle würden wir die Tabelle 'master_pets' erstellen. Die Spalten sollten 'master_id' und' pet_id' sein. –
Danke, das habe ich gesucht. – GeekJock