如何将主键添加到Rails?

问题描述:

我正在尝试使用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 

这是schema.rb文件的一部分。我将书签标记为主键的方式是否正确?此外,做出这些改变之后,我跑到铁轨分贝:迁移命令和主键部分消失,它变得像这个 -

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 

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

+2

请不要张贴图片,后置代号为文本。 – mudasobwa

+0

@mudasobwa完成。 – sindhugauri

+0

_Sidenote:_有一个冒号,然后在你的迁移的最上面一行中缺少一个逗号:':primary_key =>:bk_id,force::cascade'。 – mudasobwa

在迁移文件:

create_table :bookmarks, :primary_key => :bk_id do |t| 
    ... 
    t.integer :bk_id 
    ... 
end 

不要忘记,以表明它在你的模型太:

class Bookmarks < ActiveRecord::Base 
    self.primary_key = 'bk_id' 
end 

假设它是Rails4 +,你可以这样做:

create_table :bookmarks, force: :cascade do |t| 
    ... 
    t.integer :bk_id, primary_key: true 
    ... 
end 

在Rails3中,你只是把一个额外的语句后:

create_table "bookmarks", force: :cascade do |t| 
    ... 
    t.integer "bk_id" 
    ... 
end 
execute "ALTER TABLE bookmarks ADD PRIMARY KEY (bk_id);" 
+0

我有Rails 5.0.1。问题中提到的事情也是如此。我做了更改,并运行'rails db:migrate'命令,该部分刚刚消失。这是否应该发生? – sindhugauri

+0

啊,jeez,你正在改变'db/schema.rb'文件_ ?!不要那样做,改变迁移。 – mudasobwa

+0

好的很酷。你能解释两者之间的区别吗? – sindhugauri

不要更改schema.rb文件的内容。这些内容将通过您的迁移文件自动生成。尝试找到您的创建书签迁移文件,并添加:primary_key => bk_id它。

文件:db/migrate/xxxxxxxxxx_create_bookmarks.rbxxxxxxxxx是时间戳

帮助它帮助。