【发布时间】:2011-08-03 01:18:10
【问题描述】:
我在更改应用程序的功能时遇到了一个问题,我不得不重新编写大约 700 个现在需要限定范围的方法调用。
我一直在研究 default_scope 的工作原理,并且和大多数人一样,我发现它很接近但对我来说不是很有帮助,因为我不能很容易地覆盖它。
rails 目前提供的覆盖 default_scope 的是 unscoped 方法。 unscoped 的问题在于它完全删除了 all 范围,而不仅仅是默认范围。
我真的很想从 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)
...结果仍将作用于用户但不包括默认作用域?
我非常非常感谢任何有关如何实现此类功能的帮助或建议。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord scope named-scope