5

Ich bin auf Schienen 5 und haben ein User Modell.Referenz mit benutzerdefinierten Namen und Fremdschlüssel

Ich möchte ein Modell Book erstellen, das auf das User Modell mit dem Namen author verweist. Ich möchte auch Fremdschlüssel in der Migration festlegen.

Bei der Suche nach einer Antwort habe ich nur gefunden, hinzufügen Spalten in einer Migration, nicht beim Erstellen einer neuen Tabelle. Wie würde das unten für create_table :books aussehen?

add_reference :books, :author, references: :users, index: true 
add_foreign_key :books, :users, column: :author_id 
+1

Tipps: Vergessen Sie nicht das abhängige: zerstören oder Null machen und einen Index für diese Spalte hinzufügen. (Ich habe meine Antwort bearbeitet) –

Antwort

4

Sie author_id verwenden können: integer

Dann in Ihrem User-Modell:

has_many :books, foreign_key: :author_id, class_name: "Book", dependent: :nullify 

ich abhängig: zunichte machen um Fehler zu vermeiden, wenn Sie einen Datensatz löschen, aber Sie können dependent:: destroy verwenden, wenn Sie müssen zerstöre die Bücher, wenn du den Benutzer zerstörst.

Und Buch Modell:

belongs_to :user, foreign_key: :author_id, class_name: 'User' 

Sie sollten einen Index auf dieser Spalte hinzufügen.

-1

In Ihrem Schienen Generator Aussage:

rails g model Book user:references 
+0

Das würde eine normale Referenz mit 'user_id' erzeugen, aber ich möchte' author_id' (aber referenziere das Benutzermodell). –

+0

Es wäre dann sinnvoller, ein Autorenmodell zu haben, damit wir sagen können: Autor: Referenzen. Wenn wir "someing_id" sehen, wissen wir automatisch, dass es zu Best Practices gehört. Versuche, dich auf dieses Prinzip auszurichten. – meshpi