【问题标题】:Rails - How to create database tables from models (I have no migration scripts)Rails - 如何从模型创建数据库表(我没有迁移脚本)
【发布时间】:2012-12-18 14:55:38
【问题描述】:

我是 Rails 的新手,它是一个很棒的平台。

我创建了一个应用程序,但删除了所有迁移脚本。

我想用现有模型中的表创建数据库。

我在网上找不到它,我确信这可能是像任何其他平台(java hibernate 等)一样的选项

命令 rails 生成...只创建没有列的表,但我在现有模型中有列。那我该怎么做呢?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby rake


    【解决方案1】:

    如果您不小心清理了模型并且没有任何迁移,您仍然可以通过运行 rake db:migrate 并使用它来生成 db/schema.rb 文件。无论您对它做了什么,它都应该反映数据库的当前状态。

    如果您在其中创建包含重要部分的迁移,您会注意到格式非常相似,您将能够在其他系统上复制该配置。

    不过,这样做有点笨拙。每个模型都应该有其相关的迁移。一般来说,这些不会被删除,只有在绝对必要时才会修改,保留模式如何演变为最终状态的历史。

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题,那么确实没有办法从 ActiveRecord 模型类构建数据库表 - 最好将 ActiveRecord 模型更多地视为不同风格的关系数据库和 Ruby 对象之间的映射。换句话说,ActiveRecord 模型抽象出数据库的细节,以便独立于数据库。它们使您的数据库数据更容易在 Ruby 中访问。在这样做时,他们没有能力构建您的表格。将它们视为非常漂亮的 getter 和 setter,而不是与数据库的绑定。

      这正是迁移存在的原因 - 它们包含特定于数据库的内容。它们本质上包含模型定义的“另一半”——大多数应用程序级别的东西(比如关系,在 MySQL 中不存在,对吧?它们是 ActiveRecord 约定)是在您的模型上定义的,但是,例如,如果你想在你的 Foo 模型上有一个字符串,你可以在 migration 中定义它,你的模型上会提供适当的 getter 和 setter 来让你使用这个字符串。

      tl;dr:您需要迁移。它们存在于 Rails 中的事实是有意的设计决定,将 Ruby 模型的一半与数据库的一半分开。

      【讨论】:

        猜你喜欢
        • 2022-11-24
        • 1970-01-01
        • 2018-05-31
        • 2012-10-01
        • 2017-09-15
        • 1970-01-01
        • 2013-03-23
        • 2021-08-23
        • 1970-01-01
        相关资源
        最近更新 更多