Ruby on rails 为什么不更新属性';不更新属性,但更新了吗?
Rails版本: 轨道5.1.1 Ruby版本: ruby-2.4.0[x86_64] 本地服务器:Ruby on rails 为什么不更新属性';不更新属性,但更新了吗?,ruby-on-rails,ruby,ruby-on-rails-5,puma,ruby-2.4,Ruby On Rails,Ruby,Ruby On Rails 5,Puma,Ruby 2.4,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 UPDATE "users"
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
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]]
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]]
我有一个名为User
的现有模型,后来我添加了属性last\u name
然后,尝试用其他字段更新新创建的字段(姓氏),我使用:
user.update_attributes(first_name: 'praaveen', last_name:'vr')
对于update\u attributes
,此操作将更新first\u name
,但不会更新last\u name
属性:
rails日志:
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
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]]
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]]
然后我尝试了:
user.update(first_name: 'praaveen', last_name:'vr')
user.update_columns(first_name: 'praaveen', last_name:'vr')
这些方法会按预期更新first\u name
和last\u name
rails日志:
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
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]]
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]]
知道怎么回事吗
添加一些观察结果
a。它会随机更新,比如每10次或15次更新一次
b。puma多线程有任何问题吗?您可能会遇到如上所述的访问器问题 如文章所述: 执行以下操作将愉快地返回true,但不会更新 状态属性 @user.update_属性(:status=>“active”)
我在一个JSONB字段中遇到了类似的问题,该字段不希望用
update
保存,甚至不希望用update\u属性保存
我最后用以下内容标记要更新的字段:
attribute_name_will_change!
这就成功了!
希望有一天这会对某些人有所帮助。这很奇怪,因为你在模型中有什么可疑的东西,可能重新定义了该方法或其他东西吗?@SimpleTime我的用户模型中没有类似的属性定义。@Praveen在某处被更新属性
覆盖了吗?你能试着呼叫用户吗。在update\u attributes
语句之前重置\u column\u information
(仅用于测试目的)?@ulferts不会覆盖hanks@Fabio,但我的用户模型中没有任何类似的attr\u accessible定义。访问器是规定性的。。我猜您正在使用Desive Gem,因此您可以使用以下答案中描述的配置它:@fabio Desive不在此模型上