2

我正在尝试通过传入一个值来使用 lambda 函数来做一个 rails 范围:

"scope :for_rank, lambda {|rank| where('min_rank <= ? AND max_rank >= ?', rank, rank)}"

但是,max_rank 可能为空。在这种情况下,我希望查询只执行 min_rank <= ? 部分。我怎样才能做到这一点?

例子:

"a.min_rank = 10"
"a.max_rank = 20"
"b.min_rank = 15"
"b.max_rank = nil"

我希望 for_rank(15) 的搜索应该返回 a 和 b。

4

1 回答 1

2

试试这个:

 scope :for_rank, lambda {|rank| where('(min_rank <= ? AND max_rank IS NOT NULL AND max_rank >= ?) OR (min_rank <= ? AND max_rank IS NULL)', rank, rank, rank)}
于 2013-03-03T18:05:26.007 回答