Existuje několik způsobů, jak tuto situaci vyřešit:
- Můžete použít spouštěč databáze. Toto není databázová agnostická možnost a její podpora RoR, pokud vím, neexistuje. Pokud vaše situace nevyžaduje absolutně žádnou nekonzistenci dat, toto by byl pravděpodobně nejvýkonnější způsob, jak dosáhnout vašeho cíle, ale ne odborník na DB.
- K pravidelné synchronizaci těchto dvou tabulek můžete použít dávkovou operaci. Tato metoda umožňuje, aby se vaše dvě tabulky od sebe oddělily, a pak se data často znovu synchronizují. Pokud vaše situace umožňuje, aby k tomuto posunu došlo, může to být dobrá volba, protože umožňuje aktualizaci DB v mimopracovních hodinách. Pokud potřebujete provést synchronizaci každých 5 minut, pravděpodobně se budete chtít podívat na další možnosti. To může být řešeno vaším ruby kódem, ale bude to vyžadovat nějaký druh běhu úlohy na pozadí (cron, delayed_job, redis atd.)
- Můžete použít zpětné volání zevnitř modelu Rails. Můžete použít
"after_update :sync_denormalized_data"
. Toto zpětné volání bude zabaleno do transakce na úrovni databáze (za předpokladu, že vaše databáze transakce podporuje). Budete mít kód na úrovni Rails, konzistentní data a nebudete potřebovat proces na pozadí na úkor provádění dvou zápisů pokaždé. - Nějaký mechanismus, na který jsem nepomyslel...
Tyto typy problémů jsou velmi specifické pro aplikaci. I v rámci stejné aplikace můžete použít více než jednu z metod v závislosti na požadavcích na flexibilitu a výkon.