5

我正在编写一个范围,应该说选择 call_status = open 并且 unit_id 不为零的所有调用。我在 Ruby 上真的很弱,而且对 Rails 也很陌生,并且很难表达这种权利。

这是我所拥有的:

scope :open_calls, where(:call_status => "open", :unit_id != nil).order("id ASC")

我应该使用不同的运算符来评估 nil 吗?

4

2 回答 2

8

据我所知,没有办法告诉 ActiveRecord 用哈希构建一个 NULL 子句。但是您可以链接字符串样式和哈希样式的 where 子句:

scope :open_calls, where(:call_status => "open").where("unit_id IS NOT NULL").order("id ASC")
于 2012-07-04T00:31:48.997 回答
0

你可以这样做:

scope :open_calls, where("call_status IS ? AND unit_id IS NOT ?", "open", nil).order("id ASC")

请注意,值"open"nil被放置在一个数组中,我们?用来插入它们。这有助于防止由于引用/转义等导致的 SQL 注入错误,强烈推荐。请参阅此处了解更多信息。

于 2012-07-04T00:41:43.657 回答