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

问题描述:

Rails的版本: 的Rails 5.1.1为什么update_attributes不更新属性,但更新呢?

红宝石版本: 红宝石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

然后,尝试更新新创建的领域(姓氏)与其他领域,我用:

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

对于update_attributes,这将更新first_namelast_name属性:

轨日志:

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_namelast_name预期。

轨登录:

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多线程问题?

+0

因为这是奇怪['update_attributes'只是一个'alias'的'update'](https://github.com/rails /rails/blob/5-1-stable/activerecord/lib/active_record/persistence.rb#L289)你有什么怀疑在模型中,可能已经重新定义该方法或东西? –

+0

@SimpleLime我的用户模型中没有像attr_accessible这样的定义。 – praaveen

+0

@praaveen是'update_attributes'覆盖某处?你可以尝试调用'用户。 'update_attributes'语句之前的reset_column_information'(仅用于测试目的)? – ulferts

您可能会遇到如here所述的访问器故障。

正如在文章中解释:

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

@ user.update_attributes(:状态=> '活性')

+0

感谢@Fabio但我没有任何类似attr_accessible在我的用户模型中定义。 – praaveen

+0

访问器规定。我将有您使用的设计宝石猜测,所以你可以在这个答案所描述的配置吧: https://*.com/a/19793371/4604645 –

+0

@fabio设计没有这个模型 – praaveen