5

Jestem na szynach 5 i mam model User.Odwołanie z niestandardową nazwą i kluczem obcym

Chcę utworzyć model Book, odwołując się do modelu User o nazwie author. Chcę również ustawić klucze obce w migracji.

Podczas wyszukiwania odpowiedzi, znalazłem tylko dodać kolumny w migracji, a nie przy tworzeniu nowej tabeli. Jak wyglądałoby poniżej dla create_table :books?

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

Wskazówki: nie zapomnij o zależnościach: zniszcz lub unieważnij i dodaj indeks do tej kolumny. (Edytowałem swoją odpowiedź) –

Odpowiedz

4

Można użyć author_id: integer

Następnie w modelu użytkownika:

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

używam zależne:: unieważnić aby uniknąć błędów podczas usuwania rekordu, ale możesz używać zależnych:: niszcz, jeśli musisz niszcz książki po zniszczeniu użytkownika.

A Book model:

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

Należy dodać indeks na tej kolumnie.

-1

W swoich szynach oświadczenie generator:

rails g model Book user:references 
+0

Stworzyłoby to normalną referencję z 'user_id', ale chcę' author_id' (ale odwołując się do modelu użytkownika). –

+0

Bardziej sensownym byłoby posiadanie modelu 'autorskiego', abyśmy mogli powiedzieć' autor: referencje'. Zgodnie z najlepszymi praktykami za każdym razem, gdy widzimy 'someting_id', automatycznie wiemy, że należy on do modelu' something'. Staraj się dopasować do tego głównego. – meshpi