Rails:update_attributes更新带有Time的ActiveSupport::TimeWithZone字



在使用Postgresql的Rails 3.1.3中,如果您创建一个属性为datetime,那么它的类将使用ActiveSupport::TimeWithZone。然而,任何能够解释这一点的人:

user=User.first
user.update_attributes(:last_signed_in_at => Time.now) #True, but record isn't updated
user.update_attribute(:last_signed_in_at, Time.now) #True, and record is updated
user.last_signed_in_at = Time.now
user.save #True, and the record is updated

updateattributes与updateattribute的不同之处在于它检查验证。它失败的唯一原因可能是:

user.last_signed_in_at = ActiveSupport::TimeWithZone
Time.now.class = Time

有谁能解决这个问题吗?

这是由于在用户模型中设置了attr_accessible

update_attribtue的作用实际上与调用last_signed_in_at=非常相似。请参阅中的源代码http://apidock.com/rails/ActiveRecord/Persistence/update_attribute

update_attributesupdate_attribute的主要区别之一是update_attributes是进行质量分配,而update_attribute不是。

这就是为什么很明显这是attr_accessible问题。

相关内容

  • 没有找到相关文章

最新更新