有没有办法为单个default_scope
关联停用belongs_to
? default_scope
对于我想绕过范围的单belongs_to
以外的所有人都可以。我熟悉with_exclusive_scope
但我不认为可以与belongs_to一起使用。
有什么建议吗?
上下文:我正在尝试允许acts_as_revisable中的branch_source
关联指向不是最新的修订版(revisable_is_current
为false)。
答案 0 :(得分:33)
派对可能有点晚了(短短3年),但只是遇到了同样的问题,Tobias的解决方案肯定是正确的方向,但它可以简化为Rails 3.2+。我唯一不喜欢的是Document的“硬编码”类名,也许可以使用反射来改变......
无论如何这就是我想出来的:
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
更新:根据reflect_on_association https://gist.github.com/2923336
获得了一个通用解决方案答案 1 :(得分:31)
belongs_to :account, -> { unscope(where: :destroyed_at) }
对我有用,Rails 4.1
答案 2 :(得分:14)
我自己就是这个问题,这就是我想出的:
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
答案 3 :(得分:0)
我删除了此
belongs_to :document
并替换为
def document
Document.unscope(where: :deleted_at).find_by(id: document_id)
end
def document=(d)
self.document_id = d&.id
end