私の親クラスは、子によってコールバックにafter_save
のコールバックですべての子をロードしないことがあります。私はちょうど2つのことをチェックし、私はそれを実行しているテストを、持っているRailsアソシエーションが正しくロードされない
class Parent < ActiveRecord::Base
has_many :children
def update_something
# explained below
end
end
class Child < ActiveRecord::Base
belongs_to :parent
after_save :tell_parent_to_update
def tell_parent_to_update
parent.update_something
end
end
:
私は2つのモデルがあります。 parent.children.count
およびparent.children.length
。 両方とも4でなければなりません。私は数が時々異なっていることを認識していますが、(私が知っている限り)ここにはいけません。
私はちょうどchildren
を反復するためupdate_something
を定義する場合:
def update_something
children.each do |child|
end
end
テストが失敗した - ループが1回実行されます(単一子の配列を返します - 作成最初child
) 。
そうでなければ、children
と言わない限り、私はどんなコードでも入力できます。子供たちへの呼び出しが、連合に間違ったことをロードさせているようなものです。
それリロード修正を強制:
def update_something
children(true).each do |child|
end
end
が、これはハックされ、可能であれば私はむしろルートの問題を修正します。
これは私のバグかレールバグですか(もしあれば、これを回避するために何かできますか?)
これは問題ではありませんが、これはsqlite3を使用したテスト環境です。単一のdevコンソールセッションでレコードを作成してテストすると、dev環境でも失敗します。
'children.each do | child |'または 'Children.each do | child |'ですか? –
多分何かキーワードと関係があるかもしれません。 – Nithin
私は最初はそうだと思っていましたが、実際のコードでは今は非常に隔離されており、モデル/メソッドの実際の名前はドメイン固有であり、残念なことにキーワードではありません –