[英]Add a primary key constraint in a RoR schema
在我們的Web應用程序中,表的ID字段中保存有一個“ GUID” ID。 通過研究用於創建數據庫的實際SQL代碼,我們發現ID實際上沒有作為主鍵被延遲。 似乎沒有強制執行唯一性,也沒有創建索引。
這感覺很糟糕,所以我們想解決這個問題。 我們的目標只是將ID字段設置為“主鍵”
這是我們的schema.rb的示例
create_table "projects", :id => false, :force => true do |t|
t.string "id"
t.string "name"
t.string "objective"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "client_account_id"
t.string "default_project_name"
t.boolean "quota_exceeded", :default => false, :null => false
end
在開發中,我們使用SQLite3數據庫,而在生產中,我們依賴MySQL。
我知道不可能在現有的SQLite3數據庫上添加這樣的約束,但是我准備刪除它並在需要時重新創建它。 如果可能,我希望避免刪除MySQL DB,但如果確實需要,可以備份它,並將數據插入新的架構中。
最好的方法是什么? (Rails V3.2.6)
如果要在Rails中設置非標准主鍵,則應查看Composite_primary_keys gem
在您的遷移使用中,就像您已經做過的那樣,
:id => false
然后在您的模型中嘗試以下操作
require 'composite_primary_keys'
class User < ActiveRecord::Base
self.primary_keys = :your_custom_id
end
gem正在覆蓋默認的Rails行為,因此要使用的密鑰由create語句設置。 這樣,您還可以根據需要使用復合主鍵。
另一種方法是在遷移中使用:primary_key
選項
create_table "projects", :primary_key => 'your_id' do
...
end
要么,
如果您只想確保唯一性,則可以使用ActiveRecord驗證,如下所示:
validates_uniqueness_of :your_id, :message => "ID needs to be unique"
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.