Rails: сбой обновления поля ActiveSupport :: TimeWithZone с помощью Time by update_attributes - PullRequest
0 голосов
/ 06 февраля 2012

В Rails 3.1.3 с Postgresql, если вы создаете атрибут как 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 голосов
/ 06 февраля 2012

Это связано с тем, что 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.

...