我在一个大型的Rails电子商务应用程序中出现了一个非常非常奇怪的问题,并且我认为我会看到是否有人有很好的洞察力。我有一个包含许多关联的“订单”模型。如果我创建一个新实例,然后设置一个特定列值并“保存!” “救!”正在成功而没有错误,但更改实际上并未持久保存到数据库。我将介绍下面的场景:
@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日志记录显示订单行未更新。
我觉得我疯了。有任何想法吗?另外,请告诉我是否还有其他任何内容可以在此处发布以获取更多背景信息。