2012-03-05 36 views
9

在我的Rails3中的模型我有這兩個命名範圍:是否可以在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) 

根據他們的相似性,這將是自然的,我通過轉換第一界定第二。

我怎麼能在Rails中做到這一點?

回答

10

阿雷爾有not方法可以使用:

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

聰明!雖然你的答案表明我不能定義第一個,然後只是「不」,如下所示:'scope:above_limit,within_limit.not' – 2012-03-06 09:20:44

1

我相信這可能是工作

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("<=") 
相關問題