Ruby on rails 3 是否可以反转Rails3中的命名范围?

Ruby on rails 3 是否可以反转Rails3中的命名范围?,ruby-on-rails-3,named-scope,Ruby On Rails 3,Named Scope,在我的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 ) 范围:在限制内,其中(“等待天数\初步?”,::等待时间\限制到) 基于它们的相似性,我

在我的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中做到这一点?

我相信这是可行的

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("<=")
scope:with_limit,lambda{sign}where(“wait_days{sign}?”,::wait_TIME_limit.to_i)}
MyModel.with_限制(“>”)
MyModel.with_限制(“=”)

MyModel.with_limit(“Arel有一个
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)"
condition=arel\u table[:wait\u days\u premial].lteq(::wait\u TIME\u LIMIT.to\u i)

范围:在_限制内,其中(条件)#=>“等待_天”_!尽管您的回答表明我无法定义第一个范围,然后只是“不”第一个范围,如下所示:
scope:高于_限制,在_限制内。不