0

私は、Rails の大きな電子商取引アプリで非常に奇妙な問題を抱えており、誰かが良い洞察を持っているかどうかを確認したいと考えています。多くの関連付けを持つ「注文」モデルがあります。新しいインスタンスを作成し、特定の列の値を 1 つ設定して「保存」するとします。「保存!」エラーなしで成功していますが、変更は実際には DB に永続化されていません。以下のシナリオを実行します。

@order = Order.create!(<some attributes>)
=> true

@order.shipping_method_id
=> 1

@order.shipping_method_id = 203
=> 203

@order.save!
=> true

@order.shipping_method_id
=> 1

これを試してデバッグするために、実際に before_save フィルターを前に追加しました。値を設定した後にこの最初のフィルターが呼び出されたときに、それが正しい (「203」) ことがわかりますが、6 つほどのビルトインの後の次の before_save です。 「autosave_foo_bar_quux」フィルター (ネストされた関連付けの場合) は「1」に戻ります。

奇妙なことに、注文 (@order.reload) をリロードするだけで、列の値を変更して保存してください! 更新は成功します。

どちらの場合も、@order.changed を実行すると、ActiveModel が shipping_method_id の列値の変更を認識していることがわかります。ただし、最初の例では、SQL ログは注文行が更新されていないことを示しています。

気が狂いそうです。何か案は?また、より多くのコンテキストのためにここに投稿できるものが他にある場合はお知らせください。

4

0 に答える 0