2012-03-05 19 views
9

W moim modelu Rails3 mam te dwa nazwane zakresy:Czy można odwrócić nazwany zakres w Rails3?

scope :within_limit,  where("wait_days_preliminary <= ? ", ::WAIT_TIME_LIMIT.to_i) 
scope :above_limit,  where("wait_days_preliminary > ? ", ::WAIT_TIME_LIMIT.to_i) 

podstawie ich podobieństwa, byłoby naturalne dla mnie, aby zdefiniować sekundę przez odwrócenie pierwszego.

Jak mogę to zrobić w Railsach?

Odpowiedz

10

Arel ma metodę not można użyć:

condition = arel_table[:wait_days_preliminary].lteq(::WAIT_TIME_LIMIT.to_i) 
scope :within_limit, where(condition)  # => "wait_days_preliminary <= x" 
scope :above_limit, where(condition.not) # => "NOT(wait_days_preliminary <= x)" 
+0

Clever! Chociaż twoja odpowiedź sugeruje, że nie mogę zdefiniować pierwszego, a następnie "nie" pierwszego zakresu jak np .: 'scope: above_limit, within_limit.not' –

1

Wierzę, że to może działać

scope :with_limit, lambda{ |sign| where("wait_days_preliminary #{sign} ? ", ::WAIT_TIME_LIMIT.to_i) } 

MyModel.with_limit(">") 
MyModel.with_limit("<") 
MyModel.with_limit(">=") 
MyModel.with_limit("<=") 
Powiązane problemy