今天,我的 Ruby-on-Rails 应用程序中出现了一个错误。不知何故,每当我们通过 Device 模型访问 awsvpc 关联时,我们的 Device 模型的 awsaccount_id 字段就会被“标记为更改”。
为了调试问题,我添加了几个日志条目和几行额外的代码(如下所示)来诊断设备模型实例是如何被标记为更改的。
您可能会注意到“dev.changes”方法在记录“changes12”和“changes2”之间返回一个挂起的更改。这些日志条目之间发生的唯一代码是访问与 dev.awsvpc.id 的关联
这个 ruby 代码在什么情况下可以:
Rails.logger.info "Update_Device changes0: #{dev.changes}"
sample_vpc = dev.awsvpc_id
Rails.logger.info "Update_Device changes1: #{dev.changes}"
sample_vpc = Awsvpc.find(dev.awsvpc_id)
Rails.logger.info "Update_Device changes12: #{dev.changes}"
sample_vpc = dev.awsvpc.id
Rails.logger.info "Update_Device changes2: #{dev.changes}"
导致如下所示的日志条目:
Update_Device changes0: {}
Update_Device changes1: {}
[1m[36mAwsvpc Load (0.2ms)[0m [1m[34mSELECT "awsvpcs".* FROM "awsvpcs" WHERE "awsvpcs"."id" = $1 LIMIT $2[0m [["id", 644], ["LIMIT", 1]]
↳ app/lib/api/api_get_asset_result_builder.rb:53:in `populate_awssubnet'
Update_Device changes12: {}
[1m[36mCACHE Awsvpc Load (0.0ms)[0m [1m[34mSELECT "awsvpcs".* FROM "awsvpcs" WHERE "awsvpcs"."id" = $1 LIMIT $2[0m [["id", 644], ["LIMIT", 1]]
↳ app/lib/api/api_get_asset_result_builder.rb:55:in `populate_awssubnet'
Update_Device changes2: {"awsaccount_id"=>[66, 644]}