Rails 3:如何为现有的数据库表生成模型

18

我已经配置好了我的database.yml文件,使其指向我的现有mysql数据库。

如何从它生成模型?

rails generate model existing_table_name

只会返回一个空的模型。


给你一个空模型?那是什么意思?你想做什么? :) - thenengah
我期望它包含该表的所有字段和关联,但实际上我得到的只是一个继承自ActiveRecord :: Base的空类。 - dark_ruby
除非您创建自己的脚本,否则您所做的是不可能的。 - thenengah
6个回答

15
您可以尝试使用Rmre。它可以为现有的模式创建模型,并试图根据外键信息创建所有关联关系。

我尝试了Rmre,但它只创建了模型之间的关系(例如has_many、belongs_to),而没有创建模型属性。 - Nick

10

Rails模型并不会显示你的字段,但你仍然可以使用它们。尝试以下方法。假设你有一个名为ModelName的模型和一个名为"name"的字段,在Rails控制台中输入:

ModelName.find_by_name('foo')

如果给定的名称在数据库中存在,您应该看到结果。

Rails并不自动推断关系,但如果您的数据库遵循Rails约定,则可以轻松添加它们。

更新

我注意到这种缺乏明确性(“魔法”)是Rails新手混淆的一个来源。您始终可以查看schema.rb,以查看所有模型和字段的所有模式。另外,如果您希望在每个模型文件中看到模式,可以使用annotate_models gem,它将把DB模式放在模型文件的顶部注释中。


哇,谢谢!我从来不知道这种事情会发生!嘿嘿。今天我学到了新东西。 - Henley
生成的 Rails 模型将在 attr_accessible 调用中显示你的字段。 - OpenCoderX

3

您的答案是:

$ rake db:schema:dump

这将设置一个新的db/schema.db,以创建您的数据库的模式。


1

ActiveRecord 不解析模式定义。它向 DBM 请求表定义并动态确定字段。

如果您要通过迁移修改表,则拥有模式非常有用。模式转储和您 将帮助您将其转储以用作构建迁移的参考。

ActiveRecord 对表命名做出了一些假设,并期望 id 字段为主键,类型为顺序编号。拥有迁移将帮助您重构表和/或字段名称和类型,但您也可以通过 DBM 的命令行执行相同的操作。您不必遵循 ActiveRecord 的风格,但这样做有助于避免奇怪的错误,并让 AR 推断事情以使您的生活更轻松。


1

1
注意:适用于Rails 2,没有Rails 3版本可用。 - Michael Durrant
3
有没有人知道在Rails 3中有没有任何替代方法,可以从现有模式生成具有关系等的模型? - Arosboro

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接