【问题标题】:Why in Rails table fields are defined in migrations but not in models?为什么在 Rails 中,表字段是在迁移中定义的,而不是在模型中定义的?
【发布时间】:2017-01-08 22:46:27
【问题描述】:

我正在研究 Ruby on Rails,但对文件和代码的结构感到困惑.. 为什么在 Rails 中表字段是在迁移中定义的,而不是在模型中? 我知道,需要什么模型。然而,与任何框架一样,rails 旨在使开发人员的工作更轻松,并将所有肮脏的工作置于底层。 此外,我们在模型和迁移中定义数据库的关系? 但是我们可以只在一个地方定义它们并自动转移到另一个地方..

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    为什么在 Rails 中表字段是在迁移中定义的,而不是在模型中?

    他们不是。它们在数据库中定义。迁移运行后,您可以删除它们,模型仍将完全了解其表的定义。如果您选择通过手动运行 SQL 语句或 GUI 工具等其他方式构建数据库,您也可以构建和运行 Rails 应用程序,而无需定义单个迁移。

    此外,我们在模型和迁移中都定义了数据库的关系?

    不,仅在模型中。迁移只是为了引入数据库更改,仅此而已。他们的目的是以这样一种方式对数据库更改进行编码,以便可以将它们与对应用程序代码的相关更改一起部署。

    但我们可以在一个地方定义它们并自动转移到另一个地方..

    您的关系定义在一个地方:模型中的关联。您的数据库可以添加额外的约束,例如外键,但就 Rails 而言,如果您没有链接两个模型的关联,则这些模型不会链接。

    【讨论】:

    • ActiveRecord 使用 Ruby 的整体灵活性,因此您只需在数据库中为模型设置列。恕我直言,与必须在模型、XML 或一些古怪的代码注释语言中编写一堆属性相比,这是一个巨大的优势。
    • 谢谢。但是我们仍然可以在迁移文件中进行关联?
    • @Liker777 不可以。您不能在迁移中建立关联。关联存在于您的模型中。您的迁移可以将外键引入数据库,但外键不是 ActiveRecord 关联。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多