sun*_*304 1 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}")
Run Code Online (Sandbox Code Playgroud)
此代码工作正常,但等效的activerecord不起作用:
user = User.find(current_user.id)
user.update_attributes(:address => params[:address])
Run Code Online (Sandbox Code Playgroud)
它总是显示Begin; Rollback在日志中.你能解释一下为什么会这样吗?有任何与Postgres有关的问题吗?我正在使用Rails 3.2
编辑
我发现了我错在哪里......验证失败导致了这一点.解决方案是:
user.update_column(:address,params[:address])
Run Code Online (Sandbox Code Playgroud)
这将绕过验证.谢谢你们的帮助.
update_attributes如果所有验证都通过,则更新记录,因此您的一个验证必须失败,用于user.errors查找错误:
user = User.find(current_user.id)
user.update_attributes(:address => params[:address])
puts user.errors
Run Code Online (Sandbox Code Playgroud)
要保存单个列,请使用update_attribute.
user.update_attribute(:address, params[:address])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3347 次 |
| 最近记录: |