0

在带有 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

update_attributes 与检查验证的 update_attribute 不同。它失败的唯一原因可能是:

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

有谁能整理一下吗?

4

1 回答 1

0

这是由于attr_accessible在 User 模型中设置的。

what update_attribtuedo 实际上与 call 非常相似last_signed_in_at=请参阅http://apidock.com/rails/ActiveRecord/Persistence/update_attribute中的来源

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

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

于 2012-02-06T04:43:31.210 回答