【问题标题】:Unique constraint on a column excluding null values [closed]对不包括空值的列的唯一约束[关闭]
【发布时间】:2013-06-24 16:03:31
【问题描述】:

我有一个用户数据库,它有 Company 列,它可以是空的,即 null 或者可能包含一些值。但如果包含任何值,它应该是唯一的。如果我在模型中使用唯一属性,则不允许该列有多个空值。我正在使用 Sqlite3 数据库。

【问题讨论】:

标签: ruby ruby-on-rails-3 sqlite3-ruby


【解决方案1】:

您可以使用模型验证来处理它。也许是这样的:

class User < ActiveRecord::Base
  attr_accessible :company

  validate do
    if self.company && User.where(company: self.company).first
      raise ArgumentError, "Company must be `nil` or unique"
    end
  end
end

这有点小技巧,但它应该满足您的需求。

【讨论】:

  • User.where(company: self.company).exists? 可能是比first 更好的方法。
  • 如果我创建一个函数,并且我想在每次创建新用户时运行它。那该怎么做呢?
  • validates 将在每次创建或更新User 时运行,无需为其创建单独的方法。
  • 我认为它在每个页面上都运行,我收到此错误“您需要提供至少一个属性”
  • 我发现我将“验证”更改为“验证”。非常感谢你的帮助。我真的很感激!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多