Cześć,
Zastanawiam się jak za modelować takowe relacje.
Załóżmy ze jest tabelka photos zawierająca zdjecia, kluczem jej jest photo_id
Jest druga tabelka załózmy articles, w której kluczem jest article_id, zawiera ona równierz klucze do tabelki photos a mianowcie top_photo_id, middle_photo_id oraz bottom_photo_id. Każdy z tych trzech ostatnich pól może zawierać identyfikator rekordu z tabelki photos.
Każdy rekord z photos może mieć ale nie musi wpis w którymś z rekordów i w którymś z pól tabelki articles.
Da się to jakoś zamodelować za pomocą has_many itp itd., czy raczej zmienić podejście, i zrobić dodatkową tabelke, albo dwie gdzie będzie typ zdjecia itp itd…
Oczywiście, że się da. To jedna z podstawowych relacji :). Na początek polecam zamienić klucze główne article_id, photo_id na proste, proponowane przez rails, które są konwencją: id.
table photos:
id integer
inne pola
table articles:
id integer
top_photo_id integer
middle_photo_id integer
bottom_photo_id integer
[quote=radarek]Oczywiście, że się da. To jedna z podstawowych relacji :). Na początek polecam zamienić klucze główne article_id, photo_id na proste, proponowane przez rails, które są konwencją: id.
table photos:
id integer
inne pola
table articles:
id integer
top_photo_id integer
middle_photo_id integer
bottom_photo_id integer
[quote=radarek]Oczywiście, że się da. To jedna z podstawowych relacji :). Na początek polecam zamienić klucze główne article_id, photo_id na proste, proponowane przez rails, które są konwencją: id.
table photos:
id integer
inne pola
table articles:
id integer
top_photo_id integer
middle_photo_id integer
bottom_photo_id integer
Jest dobrze :). Tak na prawdę wybór pomiędzy belongs_to a has_one polega na tym, kto trzyma referencję (klucz obcy). W tym wypadku jest to tabela articles, któtra ma 3 klucze obce, zatem ona deklaruje “belongs_to”. W praktyce nie ma to większego znaczenia, gdyż po sposobie w jaki się operuje article.top_photo i photo.article nie bardzo da się wywnioskować kto deklaruje has_one, a kto belongs_to. I dobrze, bo nie ma to dużego znaczenia. Czy w relacji rodzic <=> dziecko powiesz, że “dziecko posiada rodzica”, czy “dziecko należy do rodzica”? Oba stwierdzenia są poprawne, a tylko sposób (kto będzie posiadał klucz obcy) zmusi Cię do wybrania odpowiedniej implementacji :).
Btw, tam ma być chyba :class_name zamiast :class. Po szczegóły zaglądnij do api.