record_timestamp = false не работает из модели - PullRequest
0 голосов
/ 26 февраля 2012

Я хочу отслеживать дату последнего времени моего пользователя без изменения атрибута updated_at.

Итак, внутри моего атрибута модели я положил:

def login!(session)
    session[:user_id] = id
    User.record_timestamp = false
    self.touch(:last_login_at)
    User.record_timestamp = true
end

тоже пробовал, что тоже самое:

def login!(session)
    session[:user_id] = id
    self.last_login_at = Time.now
    User.record_timestamps = false
    self.save(:validate => false)
    User.record_timestamps = true
end

Но столбец update_at по-прежнему обновляется после каждого входа в систему. Кажется, что User.record_timestamps = false не имеет никакого эффекта при вызове из модели напрямую. (Я использую для вызова этого метода из задач контроллера или граблей без проблем)

пожалуйста, не говорите мне использовать update_attribute: last_login_at, Time.now, который в Rails 3.1 не устанавливает столбец updated_at: я использую rails 3.0.9!

Есть идеи? Это действительно более СУХОЙ для меня, чтобы сделать это обновление от модели, а не от любого контроллера ...

--------------------


[править] Hummmmmm похоже на ошибку в рельсах: у меня есть вложенный Class SubUser

1) Я звоню @ user.login! с реальным пользователем класса (User.first.login!)

2) даже если бы я звонил SubUser.first.login! команда User.record_timestamps тоже должна влиять на класс SubUser, верно?

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Вот как я это делал раньше, пожалуйста, сделайте попытку.

def login!(session)
    session[:user_id] = id

    class << self
      def record_timestamps; false; end
    end

    self.last_login_at = Time.now
    self.save(:validate => false)

    class << self
      remove_method :record_timestamps
    end
end

Дайте мне знать, если это все равно вам поможет.

0 голосов
/ 27 февраля 2012

Я бы попробовал использовать update_attribute, потому что он не выполняет проверки, поэтому, возможно, он также не обновляет отметки времени.Я не уверен, будет ли это работать:

def login!(session)
    update_attribute :last_login_at, Time.now
end
...