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

时间:2015-03-20 21:11:40

标签: ruby-on-rails ruby-on-rails-4 activerecord

我正在尝试更新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.rbt.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设置回原始值。

1 个答案:

答案 0 :(得分:3)

仔细检查以确保您没有使用任何回调... before_save或类似的回调可能将其设置为原始值并且您不会&#39 ;看到那条消息。