Biorąc pod uwagę, że musisz zaimplementować kanał informacyjny podobny do tego, który można zobaczyć w sieciach społecznościowych, np. Na Facebooku. Obecnie używam klasy News, która ma polimorficzne powiązanie, które może być dowolnego rodzaju, jak obrazek, komentarz, przyjaźń, członkostwo grupy itp. Zawsze, gdy obiekt jest tworzony, również jako wiadomość jest tworzona. To działa dobrze z AR (ActiveRecords), ale wpadam w kłopoty, kiedy przerzucam się na DM (DataMapper) lub Sequel, ponieważ oba nie obsługują polimorficznych asocjacji i zniechęcają do ich użycia.jak uniknąć skojarzeń polimorficznych
Jednym z obejść byłoby użycie dużej klauzuli SQL z partiami UNIONów do scalenia wszystkich różnych tabel, które powinny być uważane za wiadomości. Ale ma to pewne wady, zwłaszcza wydajność byłaby straszna.
Zastanawiam się, jak rozwiązać bez polimorficznych skojarzeń, a jednocześnie uzyskać dobrą wydajność i żadnych innych wad, takich jak możliwość dodawania meta danych do wiadomości?
Dzięki ... to naprawdę prosty, ale dobry pomysł :-). Wymaga to pewnych zmian w modelu (zwracając rzeczywiste skojarzenie ref), ale powinno być ok :) – gucki
Naprawdę nie sądzę, że to jest rozwiązanie. To tak naprawdę nie opisuje pojęcia np. "możliwy do zweryfikowania" będący potencjalnie "Biznesowym" lub "Osobowym" lub "Przedmiotem". Nawet jeśli masz "business_id", "person_id", "item_id" w tabeli "Review", musisz znaleźć pierwsze pole zerowe spośród wszystkich, aby naprawdę wiedzieć, na co wskazuje opinia. Co z przypadkami, w których określone skojarzenie może być jedną z wielu różnych rzeczy? – fatuhoku