Подтвердить что ты не робот

Как отключить 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 является ложным).

4b9b3361

Ответ 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