1

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

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

4

4 回答 4

6

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

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 特定功能。

于 2008-10-06T07:32:16.977 回答
5

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

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

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

于 2008-10-06T06:15:29.987 回答
1

我有一些将遗留数据库迁移到 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 魔法。

于 2008-10-09T23:51:19.277 回答
1

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

于 2008-10-06T06:24:49.110 回答