在使用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_attributes
和update_attribute
的主要区别之一是update_attributes
是进行质量分配,而update_attribute
不是。
这就是为什么很明显这是attr_accessible
问题。