gpt4 book ai didi

ruby-on-rails - rails : How to manage associations between two tables syncing data?

转载 作者:行者123 更新时间:2023-12-04 15:49:54 24 4
gpt4 key购买 nike

我将拥有两个 Rails 应用程序,一个是成熟的,另一个是精简的。这两个应用程序都有自己的数据库,它们将使用 API 相互通信。

我有两个这样的模型(在两个应用程序中):

class Scan < ApplicationRecord
has_many :background_processes, dependent: :destroy
end

class BackgroundProcess < ApplicationRecord
belongs_to :scan
end

保存的任何记录都会使用 Web 服务触发跨数据库的同步。现在,当两个应用程序之间发生同步时,依赖模型(在本例中为 background_processes )将具有不同的 scan_id .

在数据同步的情况下我们应该如何处理关联?

最佳答案

我建议使用另一个 索引 scan 上的列您可以在其中存储可用于查询扫描记录的另一个 id 或 token 的模型。也许叫它sync_id或者其他的东西。

如果走这条路,就不用担心scan_id的不同了s 关于后台进程的记录。请务必使用扫描的 JSON 正文发送后台进程记录。 (假设您使用 JSON 作为 API 的格式。)

这是一般的想法......您将确保您的发送 API 服务发送整个扫描记录以及相关的后台进程。接收API服务,则需要使用该扫描记录sync_id查询现有的扫描记录并更新它。您还需要在后台进程记录上使用某种唯一标识符,以确保您不会创建重复项。如果需要,创建一个 sync_id在后台进程上也是如此。如果具有该 id 的扫描记录不存在,则创建它和依赖的后台进程。

本质上,发送服务的 API POST 请求可能如下所示:

{
id: 1,
sync_id: "sometoken"
... # other record columns
background_process: [
{
id: 123,
... # other record columns
}
]
}

确保 sync_id你使用的是独一无二的。在扫描模型中使用类似的东西在 before_create 钩子(Hook)上生成它:
  def set_sync_id
random_token = SecureRandom.urlsafe_base64
while Scan.where(sync_id: random_token).present? do
random_token = SecureRandom.urlsafe_base64
end
self.sync_id = random_token
end

关于ruby-on-rails - rails : How to manage associations between two tables syncing data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57257202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com