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。
感谢,
答案 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
调用。