2016-04-07 210 views
0

我有以下模型級別的唯一性約束,需要將其移至MySQL級別。什麼是SQL語句相同。條件唯一性約束Ruby on rails

class Blog < ActiveRecord::Base 
    validate :uniqness_of_title 

    def uniqness_of_title 
     blog = Blog.where("title=? and lock_version<>-1", self.title).last 
     self.errors.add :base, "Title already exists." if blog 
    end 
end 

,它應該允許讓進入「博客」表,即使標題已經具有lock_version記錄存在= -1。

回答

0
ALTER TABLE blogs ADD CONSTRAINT uc_title UNIQUE (title) 
+0

我也需要驗證lock_version列。如果博客標題存在lock_version = -1。它應該允許進入。 –

+1

我不認爲你可以做到這一點與MySQL約束(意見是由http://stackoverflow.com/questions/987099/unique-constraint-with-conditions-in-mysql備份)。就個人而言,我會在模型中留下諸如此類的業務邏輯條件。 – born4new

+0

@ born4new唯一性*只能*由數據庫保證。如果您有3個Rails應用程序服務器,則可以同時執行3個模型級別的檢查,不會找到具有該標題的現有檢查,並且所有這些都會創建一個新的檢查。如何最好的與MySQL做到這一點是另一個問題。 –