考虑 ActiveRecord 模型上的这些范围:
scope :onsale, where(:sales_state => "onsale")
scope :outdated, where(:sales_state => "outdated")
scope :onsale_or_outdated, where(" sales_state = 'onsale' OR sales_state = 'outdated' ")
为什么 Rails 知道用 覆盖:onsale
,:outdated
但不知道:onsale
用覆盖:onsale_or_outdated
?
我的用例:
我有一个具有许多范围的关系对象(假设它是一个保存的搜索),其中之一是:onsale
. 我想从那开始建立另一个关系,但这次我希望sales_state
是onsale
or outdated
。
如果我使用relation.onsale_or_outdated
,sales_state
则不会被覆盖,它只会添加一个新条件。
[...] WHERE "cars"."sales_state" = 'onsale' [...] AND (("cars"."sales_state" = 'onsale' OR "cars"."sales_state" = 'outdated'))
在这种情况下,我如何使用我的“或”-ed 条件?