Ruby 列上不包含空值的唯一约束

Ruby 列上不包含空值的唯一约束,ruby,ruby-on-rails-3,sqlite3-ruby,Ruby,Ruby On Rails 3,Sqlite3 Ruby,我有一个用户数据库,它有公司列,它可以是空的,即空的,或者可能包含一些值。但如果包含任何值,则它应该是唯一的。如果在模型中使用unique属性,则不允许列具有多个null值。我使用的是sqlite3db。您可以使用模型验证来处理它。也许是这样的: class User < ActiveRecord::Base attr_accessible :company validate do if self.company && User.where(company

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

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

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
class用户

这有点像黑客,但它应该适合您的需要。

重复:我如何在ruby on rails中做到这一点?
User.where(company:self.company)。exists?
可能是比
first
更好的方法。如果我利用这个函数,并且每次创建新用户时都要运行它,该怎么办。那么怎么做呢?
验证
将在每次创建或更新
用户
时运行,无需为其创建单独的方法。我认为它会在每个页面上运行,并且我收到了这个错误“您需要提供至少一个属性”我发现了我将“验证”更改为“验证”。非常感谢你的帮助,盖兹。我真的很感激!