Rails update_attributes不适用于Postgresql

时间:2013-05-31 12:21:28

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.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])

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

3 个答案:

答案 0 :(得分: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])

答案 1 :(得分:3)

检查失败:

user.update_attributes!(...)

答案 2 :(得分:2)

如果您在模型中使用attr_accessible但未包含:地址,则update_attributes似乎可以正常工作,但记录将无法保存。