2

在我的 Rails 项目中,我使用的是 Postgresql。

User.find_by_sql("update users set address = '#{params[:address]}' where id = #{current_user.id}")

此代码工作正常,但等效的 activerecord 不工作:

   user = User.find(current_user.id)
   user.update_attributes(:address => params[:address])

它总是显示Begin; Rollback在日志中。你能解释一下为什么会这样吗?是否有与 Postgres 相关的任何问题?我正在使用 Rails 3.2

编辑

我发现我错了......验证失败导致了这种情况。解决方案是:

  user.update_column(:address,params[:address])

这将绕过验证。谢谢你们的帮助。

4

3 回答 3

5

update_attributes如果所有验证都通过,则更新记录,因此您的验证必须失败,用于user.errors找出错误:

user = User.find(current_user.id)
user.update_attributes(:address => params[:address])
puts user.errors

为了保存单个列,请使用update_attribute.

user.update_attribute(:address, params[:address])
于 2013-05-31T12:28:23.387 回答
3

检查故障:

user.update_attributes!(...)
于 2013-05-31T12:23:51.533 回答
2

如果您attr_accessible在模型中使用但不包括 :address,则 update_attributes 似乎可以工作,但不会保存记录。

于 2013-05-31T12:30:47.923 回答