Rails在包含NULL值时检查是否存在记录?

时间:2011-06-06 04:26:11

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

使用before_create查看记录是否存在。有四个变量/列(alpha,beta,delta,gamma)。如果记录存在但匹配但是一列或多列是NULL,则该怎么看。

我的问题:如果alpha,beta和delta都不为null,但gamma为null,则存在的查询永远不会说该记录已经存在,因为gamma的可能性是无限的。有没有办法解决这个问题,而无需通过每个if语句组合。

示例:

Database record: alpha = 1, beta = 4, delta = NULL, gamma = NULL
New record: alpha = 1, beta = 4, delta = NULL, gamma = NULL  <-- this will return does not exist because of null values.

创建之前

!Model.where("alpha = ? AND beta = ?, delta = ?, gamma = ?", self.alpha, self.beta, self.delta, self.gamma).find(:first)

1 个答案:

答案 0 :(得分:0)

要检查无,您必须使用IS代替=运营商

尝试以下

!Model.where("alpha = ? AND beta = ? AND delta = ? AND 
              (gamma = ? OR gamma is ?)", 
              self.alpha, self.beta, self.delta, self.gamma, nil
             ).find(:first)