为什么update_attributes不更新属性,但更新呢?

时间:2017-09-24 07:21:13

标签: ruby-on-rails ruby ruby-on-rails-5 puma ruby-2.4

Rails版本: Rails 5.1.1

Ruby版本: ruby-2.4.0 [x86_64]

本地服务器:

Puma starting in single mode...
* Version 3.9.1 (ruby 2.4.0-p0), codename: Private Caller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000

我有一个名为User的现有模型,之后我添加了属性last_name

然后,尝试用其他字段更新新创建的字段(last_name),我使用了:

user.update_attributes(first_name: 'praaveen', last_name:'vr')

对于update_attributes,这会更新first_name,但 last_name属性:

rails log:

UPDATE "users" SET "updated_at" = $1, "first_name" = $2 WHERE "users"."id" = $3  [["updated_at", "2017-09-20 14:19:26.174311"], ["first_name", "praaveen"], ["id", 156]]

然后我尝试了:

user.update(first_name: 'praaveen', last_name:'vr')
user.update_columns(first_name: 'praaveen', last_name:'vr')

这些方法按预期更新first_name last_name

rails log:

UPDATE "users" SET "updated_at" = $1, "first_name" = $2, "last_name" = $3 WHERE "users"."id" = $4  [["updated_at", "2017-09-20   14:15:23.623292"], ["first_name", "praaveen"], ["last_name", "vr"], ["id", 156]]

知道发生了什么事吗?

添加少量观察

一个。它会像10次或15次更新一样随机更新。

湾美洲狮多线程有问题吗?

2 个答案:

答案 0 :(得分:1)

我在JSONB字段中也遇到了类似的问题,该字段不希望使用update甚至不使用update_attribute保存。

我最终将要标记的字段标记为:

attribute_name_will_change!

那行得通! 希望有一天有帮助的人。

答案 1 :(得分:0)

here所述,您可能面临一些访问者问题。

正如文章中所解释的那样:

  

执行以下操作将快乐返回true,但不会更新   状态属性。

     

@ user.update_attributes(:status =>'有效')