2

次の1つの値を渡すことで、ラムダ関数を使用してRailsスコープを実行しようとしています。

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

ただし、max_rankがnullである可能性があります。この状況では、クエリで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 に答える