rails中建模型迁移的迁移会产生哪些文件

在前文《》中我们提到过创建模型迁移的事情我们创建模型迁移的同时生成迁移文件。那时候我们关注的是迁移文件现在我们把目光投向模型迁移这边。

其中最后一個参数是模型迁移的名字用每个单词首字母大写的格式,比如说rails generate model Subject

另一个是位于app/model下的subject.rb,注意到是单数打开文件看一看,其中定义了一個叫做Subject的类继承ActiveRecord::Base,没有任何其他的内容这代表着,Subject类打算完全按照ActiveRecord提供的缺省行为运行这个后面再讲。

注意这些生成文件的位置、攵件名、内容可以看出他们之间有着一致性(都基于模型迁移名Subject)

而如果我们遵守这样的一致性便能保证Rails能够建立他们之间的关系,即使不对这些文件的关系进行更多的配置比如说在某个时刻我对Rails说:“我要使用Subject类!”。你猜怎么着Rails就会尝试着到app/models中名为subject.rb文件中找到Subject类嘚定义。如果我们说:”Subject类我需要从数据库中读取对象!“。Subject类看了看自己说没问题,我是一个ActiveRecord所以我知道应该到数据库中找到一张叫subjects的表并从中读取出相应的对象。

当然了这种遵守不是必须的,但如果我们简单的遵守规则能够这么方便快捷有什么理由不这么做呢?

所以说rails generate命令没有什么神秘的只是帮我们按照约定生成代码而已。我们也可以按照约定自己来编写这些内容结果不会有任何区别。使用rails generate方法创建出来的模型迁移都自动继承了ActiveRecord相当于建立了与数据库的关联,如果只想建立一个普通的类并不与数据库关联删除”<ActiveRecord::Basde“或鍺手工创建即可。

回过头看一看User类在app/models目录中,以后模型迁移都在这个目录里放着这个类创建之后,在《中修改过迁移文件

靠上面嘚位置,我们使用rename_table命令将表名从users改为了admin_users可是请注意,迁移文件的这些操作模型迁移文件并不知道。换句话说User依然以为与自己关联的表叫做users,但很显然现在已经不是了

这样一来就违背了Rails的规则,实际工作中是有可能出现这种情况的比如说摆在我们面前的是一个老系統,不能按照我们的要求修改表名我们来尝试自我修复一下,有两种方法

我要回帖

更多关于 模型迁移 的文章

 

随机推荐