2012-03-23 83 views
0

在Rails 3.0.9(Ruby 1.9.2,MySQL)我有一個方法,應該找到用戶使用兩個字段,類型(字符串)和標誌(布爾)。查詢的字符串部分工作正常,但不是布爾部分。Rails沒有找到價值使用!=

下面的代碼:

def find_users(type) 
    @private_users = User.where('type =? and flag != ?', org_type, true) 
end 

,試圖弄清楚發生了什麼事情,把這個代碼:

@users.each do |f| 
    puts "oh helllllllllllllllllllllllllllo #{f.user_name}"  
    puts "oh helllllllllllllllllllllllllllo #{f.flag}" 
    puts "oh helllllllllllllllllllllllllllo #{f.type}" 
end 

標誌字段爲空/空對於大多數的這些,而這些都是我正在嘗試拿起的那些。

如果我將表達式更改爲('type =? and flag = ?', type, true),它會正確找到其中1是標誌值的那些表達式。

我已經試過這些東西都無濟於事:

User.where('type =? and flag = ?', org_type, false) 
User.where('type =? and flag = ?', org_type, "") 
User.where('type =? and flag = ?', org_type, nil) 

這可能爲某人一個簡單的問題,所以我希望一些人知道答案。謝謝!

回答

2

嘗試

User.where(:type => org_type, flag: nil) 

應該導致SQL查詢

SELECT "users".* FROM "users" WHERE "users"."type" = 'some_type' AND "users"."flag" IS NULL 

的關鍵在於ActiveRecord將爲您的flag列使用IS NULL運算符。

1

如果可以爲空的列爲NULL,則不能使用普通比較運算符。您需要使用IS NULL/IS NOT NULL運算符。

您也可以嘗試NULL-safe equals (<=>)操作(這是一個新的對我來說太)