gpt4 book ai didi

ruby-on-rails - 你能在 Rails 迁移中创建一个 "temporary"模型吗?

转载 作者:行者123 更新时间:2023-12-04 06:30:30 25 4
gpt4 key购买 nike

我有一个 Rails 2 项目,它通过连接表具有多对多关系。让我们调用表 A、B 和 ABJ,其中 ABJ 具有属性 a_idb_id (以及与此问题无关的 id{created,updated}_at )。

我想做的事

不幸的是,这种关系从一开始就被错误地创建,并且应该只是一对多(A has_many B's, B Being_to A)。所以我创建了一个向上迁移,将 B 直接重新关联到 A。基本上是这样的,1)将 a_id 添加到 B,2)对于每个 ABJ,将 abj.a.id 放入 abj.b.a_id,3)drop_table :abj。这工作正常。

如果我需要 (1) create_table abj, 2) 为每个 B 创建一个新的 abj,使得 abj.a_id = b.a_id 和 abj.b_id = b,我还在向下迁移中创建了“反向”操作以返回.id, 3) remove_column a_id from B)。这也很好用。

问题

除了将这种关系“重新关联”到一对多之外,还期望不再使用的连接资源 ABJ 将消失,即删除模型、 Controller 、测试等。问题是,如果我这样做需要返回,运行向下迁移将不起作用,因为在第 2 步(对于每个 B,创建一个新的 abj)不再有任何 class ABJ < ActiveRecord::Base因为我删除了模型。

那么有没有办法在迁移中创建一个“临时”模型,只是为了操作数据库中的数据?或者您是否只是要求运行迁移的人在运行之前需要确定该模型存在?因为如果向下迁移在第 2 步失败,那么第 1 步就已经创建了 abj表,然后您必须手动删除它或在再次运行之前注释掉迁移中的第 1 步代码(然后取消注释)。

想知道是否有任何好的解决方案。

最佳答案

您可以在迁移中定义模型。只需在迁移的顶部放置一个准系统定义:

class Pancake < ActiveRecord::Base; end

在删除表的情况下,您需要注意不要在 pancakes 表不存在时调用 Pancake 上的方法。

关于ruby-on-rails - 你能在 Rails 迁移中创建一个 "temporary"模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9199699/

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