0

Postgresqlを使用するRails3.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、ユーザーモデルで設定されているためです。

実際、何update_attribtueをするかは、を呼び出すことと非常に似ていlast_signed_in_at=ます。http://apidock.com/rails/ActiveRecord/Persistence/update_attributeのソースを参照してください

update_attributesとの主な違いの1つは、そうでないときに一括割り当てを行うことupdate_attributeです。update_attributesupdate_attribute

それが問題であることは明らかですattr_accessible

于 2012-02-06T04:43:31.210 に答える