Mysql Rails没有找到使用的价值=

Mysql Rails没有找到使用的价值=,mysql,ruby-on-rails,Mysql,Ruby On Rails,在Rails3.0.9(Ruby1.9.2,MySQL)中,我有一个方法,应该使用两个字段来查找用户:type(string)和flag(boolean)。查询的字符串部分可以正常工作,但布尔部分不行 代码如下: def find_users(type) @private_users = User.where('type =? and flag != ?', org_type, true) end 要想弄清楚发生了什么,请输入以下代码: @users.each do |f| puts

在Rails3.0.9(Ruby1.9.2,MySQL)中,我有一个方法,应该使用两个字段来查找用户:type(string)和flag(boolean)。查询的字符串部分可以正常工作,但布尔部分不行

代码如下:

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)

这对某些人来说可能是一个简单的问题,所以我希望有些人知道答案。谢谢大家!

如果可空列为
NULL
,则不能使用常规比较运算符。您需要使用
IS NULL
/
IS NOT NULL
运算符


您也可以尝试使用运算符(对我来说也是新的)

如果可空列为
NULL
,则不能使用普通的比较运算符。您需要使用
IS NULL
/
IS NOT NULL
运算符

你也可以试试这个操作符(对我来说也是新的)

试试

User.where(:type => org_type, flag: nil)
应生成SQL查询

SELECT "users".* FROM "users" WHERE "users"."type" = 'some_type' AND "users"."flag" IS NULL
关键是ActiveRecord将为您的
标志
列使用
IS NULL
运算符。

试试看

User.where(:type => org_type, flag: nil)
应生成SQL查询

SELECT "users".* FROM "users" WHERE "users"."type" = 'some_type' AND "users"."flag" IS NULL
关键是ActiveRecord将为您的
标志
列使用
IS NULL
运算符