2016-05-20 5 views
1

は、次の2つのモデルがあるとします。一時的にunscopeモデル協会

class Walrus < ActiveRecord::Base 

    default_scope { where("destroyed_at IS NULL") } 
    has_many :bubbles, dependent: :destroy 

end 

class Bubble < ActiveRecord::Base 

    default_scope { where("destroyed_at IS NULL") } 
    belongs_to :walrus 

end 

私はセイウチを破壊した場合さて、それはまた、(すなわちWalrusdestroyed_atを設定し、Bubbleモデルを関連する。)彼らの気泡を破壊する私がしたい場合破壊されたWalrusレコードを見つけるために、私はこれを行うことができます:私は必要なもの

frank = Walrus.create! 
frank.bubbles.create! 
frank.destroy 
# Destroys both the walrus and bubble records 
Walrus.unscoped do 
    frank = Walrus.first 
    # => <Walrus... 
    frank.bubbles 
    # => [] 
end 

をも関連をunscopeする方法です。

実世界のアプリケーションは、APIを介して返される関連がたくさんあるモデルなので、手動でそれぞれを調べて関連付けを解除することはできません。

+0

より良い方法は、デフォルトのスコープを使用することではなく、問題を解決しない名前付きスコープ –

+0

@МалъСкрылевъを使用します。現在デフォルトのスコープを使用しているところでは、 'where(destroyed_at:nil)'スコープを再帰的に適用するように切り替える必要があります。それは私たちがここに持っているのと同じ問題です。 – Chris

答えて

0

あなたはネストされたunscopedブロック使用することができるはずです。そうでない場合unscopedのために適用されないのRails 4.2のコンソールでこれをテストし、私は協会に.to_aを追加する必要がありました

Walrus.unscoped do 
    Bubble.unscoped do 
    frank = Walrus.first 
    frank.bubbles.to_a 
    end  
end 

注意を、それは(これはおそらく結果を印刷することと関係がある - 関係オブジェクト - レールコンソールで)。