2012-10-29 162 views
1

我以前在使用Django进行Web开发之后,最近开始使用Ruby on Rails。我发现自己很喜欢的迁移(这在Django是一种事后的想法)的重点,但我通过以下关注一下:Ruby on Rails:模型,迁移和概述

    在Django
  • ,使用像南方的库时,迁移会自动从生成您对模型所做的更改。因此,检查单个文件或目录足以查看Rails,AFAIU,app/models/*。rb中所有模型的当前定义,其中仅包含这些模型的方法;这些字段分散在db/migrations中。

我想人们可以在命名迁移文件进行惩罚,所以它是可行的找到属于一个给定的模型中的所有迁移,不过,一旦你,比方说,m车型每n迁移,这是很多要跟踪。

必须有一种方法来检查特定模型的当前状态 - 字段和方法 - 没有苦差事;一个更经验丰富的RoR开发人员能够启发我吗?

回答

3

您有db/schema.rb文件,其中每个模型的所有字段都以表示形式(以一次大迁移的形式)。

数据(场)和行为(方法)之间的分离是故意的,并且它可以使用哪些注释车型在头部置评的最新应用模式的拷贝库覆盖

+0

,虽然增加了维护成本,并且不添加任何实际的好处被装入一个空数据库。 – sevenseacat

+0

辉煌,谢谢。我*知道*它必须在某个地方,我没有想到它在我眼中是正确的。 我很好,方法是分开保存,真的。 –

+0

@sevenseacat'schema.rb'文件不会增加维护成本。模型annontations这样做,这就是为什么默认行为是不添加它们(也因为DRY) – rewritten

1

如果你看一下你的模型文件,你会注意到它们不包含对它们属性的引用 - 例如,你的用户可能有一个电子邮件,但你的User.rb中没有它的踪迹。这是因为它驻留在schema.rb.

Schema.rb是运行rake db:migrate时由数据库中的rails生成的数据库的表示形式。尽管删除它并不是世界的尽头 - 运行迁移应该(理论上)导致您拥有schema.rb。但是,迁移很脆弱(例如,您可能已经添加了新的验证规则,例如最初编写迁移时),因此应该将schema.rb检入版本控制。

Schema.rb可以通过运行

rake db:schema:load