2013-02-19 18 views
12

Ludzie,Generowanie modelu ze stowarzyszeniami ActiveRecord

Pracuję nad utworzeniem aplikacji, w której mam dwie jednostki w mojej przestrzeni problemowej. Jedna istota to "biolog", a druga jednostka to "eksperyment", teraz jeden biolog może mieć wiele eksperymentów, a każdy eksperyment może mieć wielu biologów.

wiem, jak do tworzenia modeli i tras za pomocą wiersza polecenia generator:

rails generate scaffold Biologist name:string expertise:string last_pub:text 

Co jest właściwym sposobem na dodanie stowarzyszenie? Czy po aktualizacji należy zaktualizować kod modelu? Co jest dla mnie niejasne, to czy dodaję post generację asocjacji "belongs_to", jak to odzwierciedla w schemacie DB bez uruchamiania migracji? W powyższym przykładzie, jeśli "eksperyment" należy do "biologa", to w tabeli "biologa" pojawi się klucz obcy, w jaki sposób zostanie on utworzony, jeśli dodaję powiązania w procesie generowania klasy modelu. Jestem dość nowy na szynach, więc przepraszam, jeśli jest to naiwne pytanie.

Odpowiedz

2

Musisz utworzyć migrację, aby dodać kolumnę biologist_id do tabeli experiments, a następnie dodać relację belongs_to :biologist w swoim modelu .

Możesz znaleźć więcej szczegółów here.

40

Myślę, że szukasz czegoś podobnego, co następuje:

rails g scaffold Biologist experiment:references 

Czytaj this article Jose Valim gdzie pokazuje, jak to zrobić z powyższym, a także dodać indeksy db z wiersza poleceń:

+0

Dlaczego chcesz dodać indeksy db z wiersza poleceń zamiast w samej migracji? Bazy danych drużynowych nie zostaną zaindeksowane, jeśli zostawisz je poza migracją ... – Meltemi

+1

Sam wypróbuj 'szynę g scaffold Tytuł biologa: index email: uniq'. Zobaczysz, że kod wymagany do tworzenia indeksów automatycznie dodawane do migracji. To oszczędza trochę pisania i oznacza, że ​​możesz po prostu uruchomić swoje migracje i przejść dalej. – stephenmurdoch

+0

ic ... Pomyłkowo myślałem, że sugerujesz wprowadzenie zmian w schemacie bezpośrednio z linii poleceń. Mój błąd. – Meltemi

0

Chciałbym wygenerować model dla każdego z nich, a następnie utworzyć tabelę łączyć, ponieważ masz wiele ma wiele relacji. Jeśli będziesz postępować zgodnie z konwencją, tory powinny rozumieć związek związany z twoją dołączoną tabelą.

Ogólnie rzecz biorąc, jeśli zachodzi potrzeba zmodyfikowania relacji dotyczących rekordów aktywnych, należy to zrobić w modelu przy użyciu relacji has_many lub has_and_belongs_to_many.

Powiązane problemy