【问题标题】:record_timestamp = false not working from modelrecord_timestamp = false 不适用于模型
【发布时间】:2012-02-27 04:49:51
【问题描述】:

我想跟踪我的用户的 last_login DateTime,而不更改 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 没有任何效果。 (我习惯从控制器调用此方法或 rake 任务没有任何问题)

请不要告诉我使用 update_attribute :last_login_at, Time.now 在 Rails 3.1 中没有设置 updated_at 列:我使用的是 rails 3.0.9!

有什么想法吗? 从模型而不是从任何控制器进行更新对我来说真的更干...

--------


[edit] Hummmmmm 似乎是 rails 中的一个错误:我有一个嵌套的 Class SubUser

1) 我打电话给@user.login!有一个真正的类用户(User.first.login!)

2) 即使我调用的是 SubUser.first.login!命令 User.record_timestamps 应该也会影响 SubUser 类,对吧?

【问题讨论】:

    标签: ruby-on-rails-3 auto-update


    【解决方案1】:

    这是我之前的做法,请试一试。

    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
    

    如果它对你有帮助,请告诉我。

    【讨论】:

    • 简单地做 self.class.record_timestamps = false 而不是 User.record_timestamps = false 解决了它......
    【解决方案2】:

    我会尝试使用update_attribute,因为它不进行验证,所以它也可能不更新时间戳。我不确定它是否会起作用:

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

    【讨论】:

    • :) 正如我之前所说:“请不要告诉我使用 update_attribute :last_login_at, Time.now 在 Rails 3.1 中没有设置 updated_at 列:我使用的是 rails 3.0.9! "
    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2014-02-26
    • 2019-01-25
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多