Rails - 使用nil进行条件查询?

时间:2011-05-06 04:02:00

标签: ruby-on-rails ruby-on-rails-3

任何想法都有什么问题?

    @contacts = current_user.contacts.where("fname = ? OR lname = ?", nil, nil)

我想要所有联系人,其中fname或lname为空。

以下是它在日志中显示的内容,不确定为什么它没有获取记录。

 Contact Load (0.6ms)  SELECT "contacts".* FROM "contacts" WHERE ("contacts".user_id = 2) AND (fname = NULL OR lname = NULL)

思想?

由于

1 个答案:

答案 0 :(得分:28)

如果你想要空(意思是一个空字符串,但实际上不是null),那么使用一个空字符串:

@contacts = current_user.contacts.where("fname = ? OR lname = ?", "", "")

否则,如果您真的想要空值,则需要使用is null措辞:

@contacts = current_user.contacts.where("fname is null OR lname is null")

您也可以使用:lname => nil,但该格式不能用于OR查询。请注意"lname = ?", nil:lname => nil

之间的差异
@contacts = Contact.where("lname = ?", nil).to_sql
# => SELECT "contacts".* FROM "contacts" WHERE (lname = NULL)

@contacts = Contact.where(:lname => nil).to_sql
# => SELECT "contacts".* FROM "contacts" WHERE "contacts"."lname" IS NULL