Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么不更新属性';不更新属性,但更新了吗?_Ruby On Rails_Ruby_Ruby On Rails 5_Puma_Ruby 2.4 - Fatal编程技术网

Ruby on rails 为什么不更新属性';不更新属性,但更新了吗?

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"

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" 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不在此模型上