ActiveRecord::Persistence#update 忽略一个属性

ActiveRecord::Persistence#update ignoring one attribute

我正在尝试更新我的 ticket 模型中的几个属性,但由于 ActiveRecord::Persistence#update 方法忽略其中一个属性并更新散列中传递的其他属性而感到难过。

ticket_params = {"total_quantity"=>"0", "status"=>"refunded"}
ticket.update(ticket_params)

生成以下更新查询:

UPDATE `tickets` SET `status` = 'refunded', `updated_at` = '2015-03-20 21:01:48.145401' WHERE `tickets`.`id` = 307865

当我在哈希中有 3 个属性时,会发生相同的行为。

ticket_params = {"total_quantity"=>0, "status"=>"refunded", billing_name: "TT"}
t.update(ticket_params)

生成的更新查询:

UPDATE `tickets` SET `status` = 'paid', `billing_name` = 'TT', `updated_at` = '2015-03-20 21:04:47.893160' WHERE `tickets`.`id` = 307865

所有这些参数都被标记为必需和允许的。在代码或数据库中的任何地方都找不到关于 total_quantity 属性的任何特殊信息。

来自 db/schema.rb : t.integer "total_quantity", limit: 4

更新: 感谢@creativereason 的评论。尝试直接更新 total_quantity 时的输出:

ticket.total_quantity
> 5
ticket.total_quantity = 6
> 6
ticket.total_quantity
> 6
ticket.save
> true
ticket.total_quantity
> 5

最终更新: 有一个 before_validation 回调将 total_quantity 设置回原始值。

仔细检查以确保您没有使用任何回调...before_save 或类似的回调 可能 将其设置为原始值,而您不会看到该消息。