我有Rails 3.2編寫的現有Rails應用程序,並使用PostgreSQL作爲數據庫引擎。我們的產品表包含來自多個網站的產品。每個產品目前都有唯一的ID。如何在Rails 3,PostgreSQL中指定現有「唯一鍵」旁邊的「唯一」值?
這裏是模型:
class Platform < ActiveRecord::Base
attr_accessible :name, :url, :country, :email
validates :name, :presence => true,
:length => { :minimum => 1 }
has_many :sectors
end
和數據庫架構此表從schema.rb
create_table "platforms", :force => true do |t|
t.string "name"
t.string "url"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "country"
t.string "email"
end
是否有可能再添加一個「唯一密鑰」,將禁止入境或新產品使用「URL」參數?我不確定很難用Rails g migration
實現這樣的事情,而不會損壞現有記錄(如果重複已經存在)。
所以基本上:如果新產品的網址與數據庫中已存在的網址相對應,我希望rails禁止添加新產品,類似於我不允許輸入ID爲1的產品(如果有)數據庫中id = 1的產品已經存在。
我不明白你的要求,你希望每個產品都擁有唯一的網址? – MrYoshiji
我想如果因爲我不允許進入產品與ID = 1,如果是在ID = 1的產品,新產品的URL對應的URL已經在數據庫中,類似的軌道禁止添加新產品數據庫已經。 – Cninroh
PostgreSQL將對您現有的數據執行唯一約束,所以如果您已經有重複項,您將無法添加一個。你必須嘗試在你的Rails代碼中使用驗證來強制你的唯一性(但是這會讓你打開競爭條件)或者使用觸發器(但Rails使它成爲一場噩夢)。 –