Rails查询无问题

时间:2015-11-14 02:01:15

标签: ruby-on-rails activerecord

我正试图获得所有优惠券,其中expirationDate(日期类型)为零:

  @coupons = @deal.coupons.all 
  @coupons = @coupons.where("expirationDate = ?", nil)

但由于某种原因,上面的代码不起作用。 然而,如果我改为:

@coupons = @deal.coupons.all
@coupons = @coupons.where(expirationDate: nil)

它可以获得我想要的所有零优惠券。我很困惑为什么第一个不起作用,但第二个不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

例如。

User.where("name = ?",nil)

sql输出:

SELECT "users".* FROM "users"  WHERE (name = NULL)

另一种格式:

u = User.where(name: nil)

sql输出:

SELECT "users".* FROM "users"  WHERE "users"."name" IS NULL

你会发现sql不同。详细信息SQL is null and = null [duplicate]

答案 1 :(得分:2)

NULLNOT NULL的SQL查询如下:

expirationDate IS NULLexpirationDate IS NOT NULL

它并不适用于平等的#34; ="标志。你不能在SQL中做 expirationDate = NULL

您也可以尝试这样做

@coupons = @coupons.where("expirationDate IS NULL")

您可以查看此答案,了解在条件https://stackoverflow.com/a/4252615/343679

中使用null的其他替代方法