【发布时间】:2013-06-24 16:03:31
【问题描述】:
我有一个用户数据库,它有 Company 列,它可以是空的,即 null 或者可能包含一些值。但如果包含任何值,它应该是唯一的。如果我在模型中使用唯一属性,则不允许该列有多个空值。我正在使用 Sqlite3 数据库。
【问题讨论】:
-
如何在 ruby on rails 中做到这一点?
标签: ruby ruby-on-rails-3 sqlite3-ruby
我有一个用户数据库,它有 Company 列,它可以是空的,即 null 或者可能包含一些值。但如果包含任何值,它应该是唯一的。如果我在模型中使用唯一属性,则不允许该列有多个空值。我正在使用 Sqlite3 数据库。
【问题讨论】:
标签: ruby ruby-on-rails-3 sqlite3-ruby
您可以使用模型验证来处理它。也许是这样的:
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 时运行,无需为其创建单独的方法。