1

schema.db 文件应该是数据库模式的权威来源。如果是这种情况,如何将特定表映射到模型,它不会显示任何指定 id 的列。

例如,如果我有一个带有名为 :title 的列的主题模型,那么我在 schema.db 文件中看到的所有内容是这样的:

create_table "subjects", :force => true do |t|
  t.string   "title"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end

解析模式文件后,rails 是否以某种方式暗示了 id 列?在 rails 控制台中打开 Subject 的任何实例将清楚地显示所有 Subject 对象都有一个附属 id。

谢谢,

4

1 回答 1

2

create_table函数采用几个选项来控制此行为。具体来说,:idand:primary_key选项的工作方式如下:

:ID

是否自动添加主键列。默认为真。has_and_belongs_to_many 的联接表应将其设置为 false。

:首要的关键

主键的名称,如果要自动添加的话。默认为 id。如果 :id 为 false,则忽略此选项。

另请注意,这只是设置表中的主键。您还需要通过 self.primary_key= 在模型中配置主键。模型不会从其表定义中自动检测主键。

(来自Rails 文档

由于 的默认值id: true, primary_key: 'id',ID 列被排除在对 的调用之外create_table

于 2013-07-10T22:46:45.927 回答