2012-03-05 6 views
9

Trong mô hình Rails3 của tôi, tôi có những tên hai lĩnh vực:Có thể đảo ngược phạm vi được đặt tên trong Rails3 không?

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

Dựa trên sự tương đồng của họ, nó sẽ là tự nhiên đối với tôi để xác định thứ hai bằng cách đảo ngược là người đầu tiên.

Tôi có thể làm điều đó như thế nào trong Rails?

Trả lời

10

Arel có một phương pháp not bạn có thể sử dụng:

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! Mặc dù câu trả lời của bạn cho thấy tôi không thể xác định đầu tiên và sau đó chỉ là "không" phạm vi đầu tiên như vậy: 'phạm vi: above_limit, within_limit.not' –

1

Tôi tin rằng điều này có thể làm việc

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("<=")