ruby-on-rails – 你能在Rails迁移中创建一个“临时”模型吗?

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

我想做的事

不幸的是,这种关系从一开始就被错误地创建,应该只是一个多(A has_many B’s,B belongs_to A).所以我创建了一个向上迁移,将B直接重新关联到A.基本上,1)add_column a_id到B,2)为每个ABJ,把abj.a.id放到abj.b.a_id,3)drop_table:abj.这很好用.

我还在向下迁移中创建了“逆”操作,如果我需要为每个B创建(1)create_table abj,2),则创建一个新的abj,使得abj.a_id = b.a_id和abj.b_id = b .id,3)从B)中删除_column a_id.这也很好.

问题

随着“重新关联”这种关系与一个多的关系,期望不再使用的连接资源ABJ将消失,即删除模型,控制器,测试等.问题是,如果我这样做需要返回,运行向下迁移将无法工作,因为在步骤2(对于每个B,创建一个新的abj),不再有任何类ABJ< ActiveRecord :: Base,因为我删除了模型. 那么,为了操纵数据库中的数据,有没有办法在迁移中制作“临时”模型?或者您是否只是要求运行迁移的人在运行之前确定该模型是否存在?因为如果在步骤2中向下迁移失败,那么步骤1就已经创建了abj表,然后你必须手动删除它或者在迁移之前注释掉第1步代码然后再运行它(然后取消注释它)之后). 想知道是否有任何好的解决方案.

解决方法

您可以在迁移中定义模型.只需将准系统定义放在迁移的顶部:

class Pancake < ActiveRecord::Base; end

如果您正在丢弃一个表,您需要注意,当煎饼表不存在时,您不会在Pancake上调用方法.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...