我是 Rails 的新手,它是一个很棒的平台。
我创建了一个应用程序,但删除了所有迁移脚本。
我想用现有模型中的表创建数据库。
我在网上找不到它,我确信这可能是像任何其他平台(java hibernate 等)一样的选项
命令rails生成......只创建没有列的表,但我在现有模型中有列。那我该怎么做呢?
谢谢!
我是 Rails 的新手,它是一个很棒的平台。
我创建了一个应用程序,但删除了所有迁移脚本。
我想用现有模型中的表创建数据库。
我在网上找不到它,我确信这可能是像任何其他平台(java hibernate 等)一样的选项
命令rails生成......只创建没有列的表,但我在现有模型中有列。那我该怎么做呢?
谢谢!
如果您不小心清理了模型并且没有任何迁移,您仍然可以db/schema.rb
通过运行rake db:migrate
和使用它来生成文件。无论您对它做了什么,它都应该反映数据库的当前状态。
如果您在其中创建包含重要部分的迁移,您会注意到格式非常相似,您将能够在其他系统上复制该配置。
不过,这有点笨拙。每个模型都应该有其相关的迁移。通常,这些永远不会被删除,只有在绝对必要时才进行修改,从而保留模式如何演变为其最终状态的历史。
如果我正确理解了您的问题,那么确实没有办法从您的 ActiveRecord 模型类构建数据库表 - 最好将 ActiveRecord 模型更多地视为不同风格的关系数据库和 Ruby 对象之间的映射。换句话说,ActiveRecord 模型抽象出数据库的细节,以便独立于数据库。它们使您的数据库数据更容易在 Ruby 中访问。在这样做时,他们没有能力构建您的表格。将它们视为非常漂亮的 getter 和 setter,而不是绑定到数据库。
这正是迁移存在的原因——它们包含特定于数据库的内容。它们本质上包含模型定义的“另一半”——大多数应用程序级别的东西(比如关系,在 MySQL 中不存在,对吧?它们是 ActiveRecord 约定)是在您的模型上定义的,但是,例如,如果你想在你的 Foo 模型上有一个字符串,你可以在你的migration中定义它,并且你的模型上将有适当的 getter 和 setter 供你使用这个字符串。
tl;博士:你需要你的迁移。它们存在于 Rails 中的事实是有意的设计决定,将 Ruby 模型的一半与数据库的一半分开。