2013-06-24 50 views
-1

我有一個用戶數據庫,它有公司列,它可以是空的,即空值或可能包含一些值。但是,如果包含任何價值,它應該是唯一的。如果我在我的模型中使用唯一屬性,則不允許爲該列提供多個空值。我正在使用Sqlite3數據庫。對不包含空值的列的唯一約束

+0

重複:http://stackoverflow.com/questions/191421/how-to-create-a-unique-index-on-a-null-column – forker

+0

我怎麼能在軌道上做紅寶石? –

回答

0

您可以使用模型驗證來處理它。也許是這樣的:

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 

這是一個黑客,但它應該適合您的需求。

+0

'User.where(company:self.company).exists?'可能比'first'更好。 –

+0

如果我爲此創建了一個函數,並且我希望每次創建新用戶時都運行該函數。那麼怎麼做呢? –

+0

每次創建或更新'用戶'時都會運行「驗證」,因此不需要爲其創建單獨的方法。 – Eugene