gpt4 book ai didi

ruby-on-rails - 我应该在哪里编写在我更新的模式中填充新数据的脚本?

转载 作者:搜寻专家 更新时间:2023-10-30 21:56:53 24 4
gpt4 key购买 nike

我正在开发一个网络应用程序,该应用程序已经具有一定数量的表(A、B、C...)的架构(也称为生产中)。

表 A 具有对应于表 B 中的 enum 的属性。问题是我只能在表的专用列中包含该 enum 列表中的一项A. 但我希望表 A 中的对象有很多。所以我创建了一个连接表 A_B 和一个 has_many through 与我的表 B 的关联。

第一个结果是我需要用以前模式架构中的数据填充我的连接表。更清楚地说,它们是表 A 中的对象,与表 B 枚举的一个元素相关联。我需要在新创建的连接表中报告这些简单的关系(表 B 中 enum 列表中只有一个元素与表 A 对象相关联)。

这是我想做的事情类型:

list_of_ids = []
Model_A.where(attribute: 0).each { |r| list_of_ids << r.id }

a.each { |el| A_B.create(tableA_id: el, tableB_id: 0) }

我应该在哪里编写和执行这些将更新我的数据的代码行?

最佳答案

如我的评论所述,我会将此“数据更新”逻辑放在创建连接表的同一个迁移文件中。

为什么在迁移文件中?

  • 数据转换只需要进行一次,即在创建连接表之后和删除包含外键的列之前。如果您在列删除后执行此数据转换,您将收到一条错误消息,指出您的代码正在尝试访问不再存在的列。
  • 迁移负责更改数据库结构和数据完整性。

为什么不是抽成任务?

  • rake 任务应该运行多次,而不是只运行一次。通常的任务是“send_emails”、“update_expiration_dates”、“compute_cache”、“close_inactive_users_account”等。
  • 您在转换之前拥有的数据有_many -> HABTM 必须更新以遵循新结构。 rake 任务无法运行,然后您的数据将不会更新,因此您将失去模型之间的关联(在运行 rake 任务之前删除 foreign_key 列会使您失去此数据)。
  • 您的数据转换逻辑必须发生在迁移创建连接表之后和迁移删除外键列之前。有明确的方式告诉您的 Rails 应用程序:“执行此迁移,然后停止,运行此任务,然后执行此迁移”。它将连续运行迁移。如果您有这 2 个迁移待处理,它们将立即运行,除非您另有指定(这根本不常见),然后您的 rake 任务将无用,因为它依赖于外键列仍然存在的事实。

关于ruby-on-rails - 我应该在哪里编写在我更新的模式中填充新数据的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39877597/

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