0

我在一个大型 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 日志显示订单行没有更新。

我感觉我快疯了。有任何想法吗?另外,让我知道我是否可以在此处发布其他任何内容以获取更多信息。

4

0 回答 0