【问题标题】:What does a db table created by the Rails framework look like?Rails 框架创建的 db 表是什么样的?
【发布时间】:2008-10-06 06:13:00
【问题描述】:

我没有设置 Rails 环境,实际上很难找到一个快速的答案,所以我会问专家。

当 Rails 根据您设置的“模型”创建表时,Rails 是创建一个完全反映该模型的表,还是在表中添加更多字段以帮助它发挥其魔力?如果是这样,它还添加了哪些其他字段,为什么?也许您可以剪切并粘贴表格结构,或者简单地将我指向解决此问题的文档或教程部分。

【问题讨论】:

    标签: ruby-on-rails database model


    【解决方案1】:

    如果您要构建一个全新的应用程序,包括一个新的数据库,那么您可以通过迁移构建整个后端。运行

    ruby script/generate model User name:string
    

    为模型和迁移生成 user.rb 文件:

    class CreateUsers < ActiveRecord::Migration
      def self.up
        create_table :users do |t|
          t.string :name
    
          t.timestamps
        end
      end
    
      def self.down
        drop_table :users
      end
    end
    

    您可以看到,默认情况下,生成脚本会为(创建和最后更新)添加“时间戳”,如果允许它们保持存在,则会自动管理它们。

    不可见,但重要的是,创建了一个额外的列“id”作为单个主键。不过,这不是强制性的 - 您可以在模型中指定自己的主键,如果您使用的是旧模式,这很有用。假设您保留 id 作为键,那么 Rails 将使用任何可用于新键值的 RDBMS 特定功能。

    【讨论】:

      【解决方案2】:

      在 ActiveRecord 中,模型是从数据库表中创建的,而不是相反。

      您可能还想研究迁移,这是一种从 Ruby 代码描述和创建数据库的方法。但是,迁移与模型无关;模型仍然是在运行时根据数据库的形状创建的。

      Rails 网站上有与 ActiveRecord 和 Migrations 相关的截屏视频:http://www.rubyonrails.org/screencasts

      【讨论】:

      • 这很奇怪,因为我看到一些人演示 Rails 的精彩的视频对模型进行了更改,并将这些更改传播到数据库。还是我记错了?
      • 我只用过 ActiveRecord。也许您看到的是不同的数据访问系统。
      • Ixion,您可能想到了著名的 15 分钟博客视频,该视频使用迁移对数据库架构进行更改,由于使用了脚手架,这些更改立即反映在屏幕上的表单中。跨度>
      • DataMapper(ActiveRecord 的“竞争对手”)采用直接在模型文件中描述表的方法。然而,DM 更多地用于 Merb,而不是 Rails。也许您看过 Merb/DM 截屏视频?
      【解决方案3】:

      Here 是 ActiveRecord 的官方文档。它同意布拉德的观点。您可能已经看到了不同的访问方法或迁移(这会改变表并因此改变模型)

      【讨论】:

        【解决方案4】:

        我有一些将遗留数据库迁移到 Rails 中并从外部脚本访问 Rails 数据库的经验。这听起来像你正在尝试做的事情。我的经验是建立在 MySQL 之上的 Rails 数据库,所以你的里程可能会有所不同。

        一个隐藏字段是最明显的——Rails 用作其默认主键的“id”字段(一个整数)。除非您另外指定,否则 Rails 中的每个模型都有一个“id”字段,它是一个唯一的、递增的整数主键。这个“id”字段将自动出现在 Rails 通过迁移生成的任何模型中,除非您告诉 Rails 不要这样做(通过指定不同的字段作为主键)。如果您从 Rails 本身外部使用 Rails 数据库,则应注意此值。

        “id”字段是 Rails 魔法的关键部分,因为它用于定义 Rails 的关联。假设您将两个表关联在一起 --- Group 和 Person。 Group 模型将有一个“id”字段,而 Person 模型应该有自己的“id”字段和关系的“group_id”字段。 “group_id”中的值将引用关联组的唯一 ID。如果您以遵循 Rails 约定的方式构建模型,则可以通过说 Group 模型“has_many :people”和 Person 模型“belongs_to :group”来利用 Rails 的关联。

        默认情况下,Rails 迁移还希望添加“created_at”和“updated_at”字段(所谓的“时间戳”),它们是日期时间字段。默认情况下,它们利用数据库中的“魔法”——而不是在 Rails 本身中——在创建或修改记录时自动更新。我认为这些列不会让您感到困惑,因为它们应该在数据库级别进行处理,而不是通过任何特殊的 Rails 魔法。

        【讨论】:

        • created_at 和 updated_at 字段在 Rails 中处理,而不是通过任何数据库“魔法”。您可以直接在生成的 SQL 中看到这一点。
        猜你喜欢
        • 2014-01-13
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 2023-03-26
        • 2019-03-30
        • 2014-10-26
        相关资源
        最近更新 更多