如何将主键添加到Rails?

sin*_*uri 1 ruby database sqlite schema ruby-on-rails

我正在尝试使用Rails创建一个电子商务网站类型的东西.所以我为它制作了我的模型.我的问题是如何将特定元素作为主键?

create_table "bookmarks", :primary_key => bk_id force: :cascade do |t|
  t.string   "bk_name"
  t.string   "size"
  t.string   "brand"
  t.string   "product_id"
  t.integer  "mrp"
  t.text     "colour"
  t.integer  "stock"
  t.integer  "discount"
  t.text     "bk_description"
  t.integer  "bk_id",          primary:true
  t.integer  "cart_unit"
  t.datetime "created_at",     null: false
  t.datetime "updated_at",     null: false
end
Run Code Online (Sandbox Code Playgroud)

这是schema.rb文件的一部分.我标记书签ID作为主键的方式是否正确?此外,在进行这些更改后,我运行了rails db:migrate命令,主键部分消失了,它变得像这样 -

create_table "bookmarks",force: :cascade do |t|
  t.string   "bk_name"
  t.string   "size"
  t.string   "brand"
  t.string   "product_id"
  t.integer  "mrp"
  t.text     "colour"
  t.integer  "stock"
  t.integer  "discount"
  t.text     "bk_description"
  t.integer  "bk_id"
  t.integer  "cart_unit"
  t.datetime "created_at",     null: false
  t.datetime "updated_at",     null: false
end
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会发生这种情况,为什么我做的那些改变(我在编辑后保存了文件)就消失了.谁可以给我解释一下这个?另外,我想提一下我正在学习Ruby on Rails所以...请对我温柔.:P

小智 5

在您的迁移文件中:

create_table :bookmarks, :primary_key => :bk_id do |t|
    ...
    t.integer :bk_id
    ...
end
Run Code Online (Sandbox Code Playgroud)

不要忘记在你的模型中指出它:

class Bookmarks < ActiveRecord::Base
    self.primary_key = 'bk_id'
end
Run Code Online (Sandbox Code Playgroud)