Как я могу соединить две таблицы БД с помощью Rails? - PullRequest
0 голосов
/ 09 июня 2010

У меня есть две таблицы из одной и той же БД, что при обновлении одного поля необходимо обновить соответствующее поле во второй таблице с этой информацией.Как я могу соединить эти поля (и таблицы) вместе с помощью инфраструктуры Rails?

Ответы [ 2 ]

1 голос
/ 09 июня 2010

Если вы хотите обработать это в самом стеке Rails, один из способов, с помощью которых я сейчас решаю подобную ситуацию, - использование метода обратного вызова ActiveRecord. Документация для этого доступна здесь . В вашей модели, где атрибут был изначально изменен, вы можете использовать обратный вызов after_validation_on_create:

after_validation_on_create :toggle_other_table_asset


  def toggle_other_table_asset
    if self.in_use
      sibling.in_use = 1
    else
      sibling.in_use = 0
    end
    sibling.save
  end

Вы также можете рассмотреть возможность использования транзакции ActiveRecord для обеспечения целостности ваших данных, более подробную информацию можно найти здесь .

Лучший совет, который я могу вам дать, - рассмотреть потенциальные недостатки обеспечения того, чтобы все было сделано на прикладном уровне. Есть также недостатки, связанные с соединением ваших данных таким способом. Возможно, вам следует подумать о рефакторинге ваших моделей, чтобы избежать дублирования данных.

Примеры того, где что-то может пойти не так, включают сценарии обслуживания, которые запускаются по выходным, которые очищают вашу базу данных, или взаимодействуют с интерфейсом командной строки вашей базовой базы данных и изменяют атрибуты виновника вручную ... без программирования базы данных TRIGGER, вы ' Вы рискуете нарушить целостность ваших данных.

0 голосов
/ 09 июня 2010

Вы можете подключиться к нескольким базам данных, используя rails , как описано здесь .Но для меня, если вы просто хотите реплицировать данные, возможно, было бы проще иметь некоторую логику на уровне базы данных и исключить из нее рельсы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...