Lai*_*uan 69 activerecord ruby-on-rails
我曾经认为db/schema.rb在Rails项目中存储了数据库模式,因此ActiveRecord可以知道它具有哪些表/列.
但早些时候我惊奇地注意到我的项目在删除后正常运行db/schema.rb!
那么,既然Rails没有它可以工作,那schema.rb真正做到了什么?
Hol*_*ust 100
该schema.rb主要有两个目的:
它记录了数据库模式的最终当前状态.通常,特别是当您进行多次迁移时,仅从迁移中删除模式很困难.有礼物schema.rb,你可以看看那里.ActiveRecord本身确实不会使用它.它将在运行时期间对数据库进行内省,因为这比期望用户保持schema.rb最新更安全.但是,为了避免开发人员混淆,您应该始终维护一个与您的迁移最新的文件.
测试使用它来填充数据库模式.因此,这rake db:schema:dump通常作为佣金test:prepare运行的一部分运行.目的是测试数据库的模式与当前开发数据库完全匹配.
迁移,尽管可能很强大,但并不是您的数据库模式的权威来源。该角色属于 db/schema.rb 或 Active Record 通过检查数据库生成的 SQL 文件。它们不是为编辑而设计的,它们只是代表数据库的当前状态。
无需(而且很容易出错)通过重放整个迁移历史来部署应用程序的新实例。将当前模式的描述加载到数据库中要简单得多,速度也更快。
例如,测试数据库是这样创建的:将当前的开发数据库转储(转储到 db/schema.rb 或 db/structure.sql),然后加载到测试数据库中。
如果您想快速查看 Active Record 对象具有哪些属性,架构文件也很有用。此信息不在模型的代码中,并且经常分布在多个迁移中,但该信息很好地总结在模式文件中。如果您需要该功能, annotate_models gem 会自动添加和更新每个模型顶部的注释,总结模式。
| 归档时间: |
|
| 查看次数: |
21728 次 |
| 最近记录: |