2010-07-09 11 views
7

Chcę mieć model Status, który będzie względnie statyczny po konfiguracji zdefiniowanej przez użytkownika (a różni użytkownicy mogą mieć różne wartości w statusie).Czy powinienem używać has_one lub belongs_to w ruby ​​na szynach?

Ten status może mieć zastosowanie do różnych modeli, takich jak Contact i Event.

więc statusy zwracane przez contact.status będzie się różnić od event.status

Chcę zaprojektować aplikację, tak aby stół stan posiada różne typy (contacts i events).

Jaka jest właściwa strategia i format tego?

myślę deklarowania :has_one Status w modelu Contact, i przechowywania :status_id w tabeli :contacts. Ditto z Event.

:statuses Tabela będzie miała wartość statusu, typ i datę.

Czy to ma sens? Czy możesz zaproponować lepsze podejście?

Odpowiedz

7

Istnieje bardzo pytanie: guide on this. Twoja sytuacja wygląda nieco inaczej, ponieważ wydaje się, że twój model statusu musi być polimorficzny, ponieważ różne rzeczy będą "możliwe do skontrolowania".

Aby odpowiedzieć na pytanie, Kontakt/Wydarzenie ma status Ma sens.

+1

mój model stanu jest polimorficzny .... Edytowałem go powyżej .... Zastanawiam się, czy powinienem zrobić rzeczy proste, ponieważ wydaje się być trudny do wyszukania ... trudniej niż myślałem – Angela

1

Po pierwsze, związek has_one nie przechowuje identyfikatora w bieżącym modelu. Szuka klucza obcego we względnej tabeli. Aby zapisać status_id w Kontaktach lub Zdarzeniach, użyjesz belongs_to.

Po drugie, w zależności od rodzaju informacji przechowywanych w Statusie, dlaczego musi to być osobna tabela? Dlaczego nie utworzyć kolumny statusu w każdym modelu, w którym chcesz używać statusu? Przydałoby się tu trochę więcej informacji.

+1

Cóż ... może być. Wyglądało na to, że widziałem ERD, gdzie pewne atrybuty, które były dość wystandaryzowane, były osobnymi tabelami. Ponieważ, jak zauważyłem powyżej, wartości statusu nie zmieniają się zbytnio, wydawało się, że jest to rodzaj rzeczy we własnej tabeli, zwłaszcza, że ​​zostanie udostępniony jako rozwijany lub automatycznie uzupełniany jako atrybut. – Angela

2

Wystarczy, aby ukończyć odpowiedź w bardziej ogólnym ustawieniu, które może wpłynąć na Twój wybór: belongs_to asocjacja jest używana w modelu, który ma klucz obcy.

+0

to nie jest prawda . klucz obcy może być również użyty na has_many, gdy nie można wywnioskować tego związku. – sabaeus

Powiązane problemy