2017-04-14 48 views
1

我正在嘗試使用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

回答

4

在遷移文件:

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

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

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

假設它是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

0

不要更改schema.rb文件的內容。這些內容將通過您的遷移文件自動生成。嘗試找到您的創建書籤遷移文件,並添加:primary_key => bk_id它。

文件:db/migrate/xxxxxxxxxx_create_bookmarks.rbxxxxxxxxx是時間戳

幫助它幫助。