Как отключить default_scope для свойства own_to?
Есть ли способ отключить default_scope
для одной ассоциации belongs_to
? default_scope
отлично подходит для всех, кроме одного belongs_to
, который я хотел бы обойти область. Я знаком с with_exclusive_scope
, но я не думаю, что его можно использовать с belongs_to.
Любые предложения?
Контекст: я пытаюсь разрешить ассоциацию branch_source
в acts_as_revisable, чтобы указать на версию, которая не является последней ( revisable_is_current
является ложным).
Ответы
Ответ 1
Вероятно, немного поздно для вечеринки (всего лишь 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
Ответ 2
belongs_to :account, -> { unscope(where: :destroyed_at) }
работает для меня, Rails 4.1
Ответ 3
Просто у меня была эта проблема, и вот что я придумал:
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