2016-04-07 165 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做到这一点是另一个问题。 –