Existem algumas maneiras de lidar com essa situação:
- Você pode usar um gatilho de banco de dados. Esta não é uma opção agnóstica de banco de dados e o suporte RoR é inexistente até onde eu sei. Se sua situação não exigir absolutamente nenhuma inconsistência de dados, essa provavelmente seria a maneira mais eficiente de atingir sua meta, mas não um especialista em banco de dados.
- Você pode usar uma operação em lote para sincronizar as duas tabelas periodicamente. Esse método permite que suas duas tabelas se afastem e, em seguida, ressincronize os dados de vez em quando. Se sua situação permitir que esse desvio ocorra, essa pode ser uma boa opção, pois permite que o banco de dados seja atualizado fora do horário comercial. Se você precisar fazer a sincronização a cada 5 minutos, provavelmente desejará procurar outras opções. Isso pode ser tratado pelo seu código ruby, mas exigirá um executor de tarefas em segundo plano de algum tipo (cron, delay_job, redis, etc.)
- Você pode usar um callback de dentro do seu modelo Rails. Você pode usar
"after_update :sync_denormalized_data"
. Esse retorno de chamada será encapsulado em uma transação no nível do banco de dados (supondo que seu banco de dados suporte transações). Você terá código no nível do Rails, dados consistentes e não precisará de um processo em segundo plano às custas de fazer duas gravações todas as vezes. - Algum mecanismo que eu não tinha pensado...
Esses tipos de problemas são muito específico do aplicativo. Mesmo dentro do mesmo aplicativo, você pode usar mais de um dos métodos, dependendo dos requisitos de flexibilidade e desempenho envolvidos.