Mysql Ruby on rails的条件唯一性约束

Mysql Ruby on rails的条件唯一性约束,mysql,ruby-on-rails,Mysql,Ruby On Rails,我有以下模型级别的唯一性约束,需要将其移动到MySQL级别。SQL语句执行相同的操作 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 al

我有以下模型级别的唯一性约束,需要将其移动到MySQL级别。SQL语句执行相同的操作

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
classblog

它应该允许在“blogs”表中输入条目,即使标题已经存在,并且记录的lock\u version=-1。

我也需要验证lock\u version列。如果博客标题存在,且lock_version=-1。它应该允许创建条目,我认为用mysql约束无法做到这一点。就我个人而言,我会将这种业务逻辑条件留在模型中。@born4new惟一性只能由数据库保证。如果您有3个Rails应用程序服务器,那么您可能会同时执行3个模型级检查,让它们中的任何一个都找不到具有该标题的现有服务器,并且所有这些服务器都会创建一个新服务器。如何用MySQL最好地做到这一点是另一个问题。
ALTER TABLE blogs ADD CONSTRAINT uc_title UNIQUE (title)