我正在尝试更新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设置回原始值。
答案 0 :(得分:3)
仔细检查以确保您没有使用任何回调... before_save
或类似的回调可能将其设置为原始值并且您不会&#39 ;看到那条消息。