2013-03-03 64 views
2

我試圖通過傳遞一個值做使用Lambda功能的軌道範圍:Rails的SQL查詢,如果空

"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兩者。

回答

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)} 
+0

感謝,效果不錯! – user2129376 2013-03-03 19:40:06