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