1

在之前使用 Django 进行 Web 开发之后,我最近开始使用 Ruby on Rails。我发现自己非常喜欢对迁移的强调(这在 Django 上是事后才想到的),但我有点担心以下问题:

  • 在 Django 中,使用 South 这样的库,迁移是根据您对模型所做的更改自动生成的。因此,检查单个文件或目录就足以查看所有模型的当前定义
  • 在 Rails、AFAIU、app/models/*.rb 中只包含那些模型的方法;这些字段分散在整个数据库/迁移中。

我想人们可以在命名迁移文件时受到纪律处分,因此可以找到与给定模型有关的所有迁移,但是,一旦你找到每个m都有迁移的模型n,那就需要跟踪很多。

必须有一种方法可以检查特定模型的当前状态——包括字段和方法——而无需繁琐的工作;一位经验丰富的 RoR 开发人员能否启发我?

4

2 回答 2

3

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

数据(字段)和行为(方法)之间的分离是有意的,并且可以使用在头部注释中使用最新适用模式的副本注释模型的库来覆盖它

于 2012-10-29T07:11:28.327 回答
1

如果您查看模型文件,您会注意到它们不包含对其属性的引用 - 例如,您的用户可能有一封电子邮件,但在您的 User.rb 中没有任何痕迹。那是因为它位于schema.rb.

Schema.rb是运行 rake db:migrate 时由数据库中的 rails 生成的数据库的表示。虽然如果你删除它不是世界末日 - 运行你的迁移应该(理论上)导致schema.rb你拥有。但是,迁移很脆弱(例如,自从最初编写迁移以来,您可能已经添加了新的验证规则),因此,您应该schema.rb检查版本控制。

Schema.rb可以通过运行加载到空数据库中

rake db:schema:load
于 2012-10-29T07:18:57.340 回答