rails schema.db没有id列

时间:2013-07-10 22:36:18

标签: ruby-on-rails

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。

感谢,

1 个答案:

答案 0 :(得分:2)

create_table函数需要几个控制此行为的选项。具体来说,:id:primary_key选项的工作原理如下:

  

:ID

     

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

     

:primary_key

     

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

     

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

(来自rails docs

由于默认值为id: true, primary_key: 'id',因此ID列不会被create_table调用。