我遇到了更改应用程序功能的问题,不得不重新编写大约700个现在需要确定范围的方法调用。
我一直在调查default_scope
是如何运作的,和大多数人一样,我发现它很接近,但对我来说并不是很有帮助,因为我无法轻易地覆盖它。
当前提供的覆盖default_scope的rails是unscoped
方法。 unscoped
的问题在于它完全删除了所有范围,而不仅仅是默认范围。
我真的很喜欢Rails / ActiveRecord大师的一些选择。
鉴于此基本所需功能...
class Model < ActiveRecord::Base
...
belongs_to :user
...
default_scope where(:foo => true)
scope :baz, where(:baz => '123')
scope :sans_foo, without_default.where(:foo=>true)
...
end
你能/你怎么能创建一个方法,可以删除默认范围,同时保持其他范围保持不变? IE,目前如果您使用...
user.models.unscoped.where(something)
......与调用
相同Model.where(something)
是否可以定义一种方法,允许你做这样的事情......
user.models.without_default.where(something)
...结果仍然是用户范围,但不包括默认范围?
我非常非常感谢有关如何实施此功能的任何帮助或建议。
答案 0 :(得分:0)
您必须使用with_exclusive_scope
。
http://apidock.com/rails/ActiveRecord/Base/with_exclusive_scope/class
User.with_exclusive_scope do
user.models.baz.where(something)
end