如何禁用一个belongs_to的default_scope?

有没有一种方法来禁用单个belongs_to关联的default_scope ? 除了一个belongs_to ,我想绕过范围default_scope是好的。 我熟悉with_exclusive_scope但我不认为可以与belongs_to一起使用。

有什么build议么?

上下文:我试图让acts_as_revisable中的branch_source关联指向不是最新的修订( revisable_is_current为false)。

大概晚了3年,但刚刚遇到同样的问题,Tobias的解决scheme肯定是正确的方向,但Rails 3.2+可以简化。 我唯一不喜欢的就是Document的“硬编码”类名,也许可以使用reflection来活动。

无论如何,这是我所想出的:

 class Comment < ActiveRecord::Base # Document has some kind of default_scope belongs_to :document # Ensure document is not scoped, because Rails 3.2 uses modules it's # possible to use simple inheritance. def document Document.unscoped { super } end end 

更新 :得到一个通用的解决scheme,基于reflect_on_association https://gist.github.com/2923336

 belongs_to :account, -> { unscope(where: :destroyed_at) } 

为我工作,Rails 4.1

我自己也有这个问题,下面是我想到的:

 class Comment < ActiveRecord::Base belongs_to :document # Document has some kind of default scope # that stops us from finding it # Override getter method for document association def document_with_unscoped # Fetch document with default scope disabled Document.unscoped { document_without_unscoped } end alias_method_chain :document, :unscoped end