2017-06-13 4 views
0

私は私の問題を解決しましたが、なぜこれが起きているのかはわかりません。これは奇妙なバグですか?.all.lengthと.length in before_create - クレイジーな動作!誰かがこれを説明できますか?

私はメンバーシップモデルでアクションを作成する前に持っています。

メンバーシップは組織に所属できます。組織has_manyメンバーシップ。

before_create :check_payment_plan

それから私はcheck_payment_plan方法でいくつかのロジックを持っています。それは無関係です。誰かがのインスタンスを持っている場合、将来の参考のためにそう

def check_payment_plan 
    puts self.organization.memberships.all.length 
end 

**The membership is created.** 

:メソッドがどのように見えるとき

def check_payment_plan 
    puts self.organization.memberships.length 
end 

**The membership is not created.** 

:メソッドがどのように見えるとき

:私は、次の行動を発見してきたようにbefore_filterチェックでモデルが作成されていないことを確認します。上記のパターンに従うと、.all.lengthが利用されます。

これはなぜ起こっているのか説明できますか?

+0

あなたは '**メンバーシップは作成されていません。**' 'あなたは' self.organization.memberships.length'に基づいて何をしていますか? –

+0

カウント/長さはどのようにモデルを作成しますか? –

答えて

1

これは実際にはself.organization.memberships.countに簡略化され、DBレベルでカウントが行われるため、発生している問題を解決できる場合があります。

0

モデルは、モデル全体が単なるインスタンスの代表であることが最もよいと考えられます。だから、まずは.allを呼び出さなければならないのです。

関連する問題