如何将主键添加到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
在迁移文件:
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);"
我有Rails 5.0.1。问题中提到的事情也是如此。我做了更改,并运行'rails db:migrate'命令,该部分刚刚消失。这是否应该发生? – sindhugauri
啊,jeez,你正在改变'db/schema.rb'文件_ ?!不要那样做,改变迁移。 – mudasobwa
好的很酷。你能解释两者之间的区别吗? – sindhugauri
不要更改schema.rb
文件的内容。这些内容将通过您的迁移文件自动生成。尝试找到您的创建书签迁移文件,并添加:primary_key => bk_id
它。
文件:db/migrate/xxxxxxxxxx_create_bookmarks.rb
(xxxxxxxxx
是时间戳)
帮助它帮助。
请不要张贴图片,后置代号为文本。 – mudasobwa
@mudasobwa完成。 – sindhugauri
_Sidenote:_有一个冒号,然后在你的迁移的最上面一行中缺少一个逗号:':primary_key =>:bk_id,force::cascade'。 – mudasobwa