gpt4 book ai didi

ruby-on-rails - Rails 从模型生成迁移

转载 作者:数据小太阳 更新时间:2023-10-29 07:22:36 24 4
gpt4 key购买 nike

我一直在阅读 Rails Migrations帮助我开始构建 Rails 项目。

我对 db/migrate 中文件的生成有点困惑。

我设计应用程序的方式是从模型开始……尽我所能概述我将在系统中拥有的所有对象。我想使用 Rails 迁移生成器从这些模型自动生成迁移文件。

是的,我知道“手动创建迁移很容易”。我知道我可以手动完成,但我不明白为什么该工具与预先创建的模型分开。

根据我对这篇文章和其他关于 SO 的迁移问题的理解,我可以像这样生成一个迁移:

rails generate migration SomeObj field:string some_other_field:integer

我不明白的是,当我的 SomeObj 模型已经存在时,为什么我需要传入字段? Rails 无法从 some_obj.rb 检测到它并从那里创建迁移吗?

此外,当我有一个更复杂的模型,具有 has_many、belongs_to 和 has_to_and_belongs_to_many 关系时,如果它自动创建具有正确名称(例如 foreign_obj_id、foreign_obj_ids)的 JOIN 表和字段,那就太好了

在之前的项目中,我不必处理迁移,因为我使用了 Mongo+Mongoid - 由于 Mongo 工作方式的性质,集合是自动生成的(不存在的集合会在插入或更新时自动创建).现在我使用的是 Postgres 和这个 Rails 应用程序(但我确信同样的事情会发生在 MySQL 或任何其他关系数据库上)。

反正这种事情就没有 helper 吗?我必须手动创建所有这些迁移吗?

最佳答案

你搞反了。您需要先构建迁移,然后再构建模型。迁移推进数据库的状态。您的模型反射(reflect)了数据库的当前 状态。模型与迁移之间没有一对一的映射。

I would like to generate the migration files FROM these models automatically with the rails migration generator.

做不到。

您使用 rails generate migration 来生成迁移,这几乎作为副作用生成了一个 stub 模型文件。您不能使用现有的模型文件来生成模型的迁移,因为该模型不包含有关构成模型的实际列的任何信息。 Rails 必须从您的关联/验证中提取和暗示所有必要的信息,即使那样它也会使大多数列出错。

Also, when I have a more complex model,... it would be really nice if it autocreated the JOIN tables and fields with the correct names

同样,你不能。你负责定义你的数据库模式,你这样做的方式是构建迁移。您可以手动或通过 rails generate 执行此操作,但您应该遵循的过程是首先构建您的迁移,其次是您的模型。

例如,这里有一个完整模型,可以投入生产:

class MyModel < ActiveRecord::Base
end

该模型定义可能包含一个包含 10 列或 1000 列的表;根据模型定义,您(和 Rails)绝对无法知道。

这是另一个模型,它至少包含一列,但同样,您无法知道是哪种列:

class MyModel < ActiveRecord::Base
validates :code, presence: true, uniqueness: true
end

code 是字符串还是数字?列上应该有索引吗?绝对没有办法知道。

关于ruby-on-rails - Rails 从模型生成迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14451972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com