Rails:使用time更新ActiveSupport :: TimeWithZone字段update_attributes失败

时间:2012-02-06 03:35:30

标签: ruby-on-rails datetime activerecord update-attributes

在使用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

任何能够解决问题的人?

1 个答案:

答案 0 :(得分:0)

这是由于用户模型中设置了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问题。