【发布时间】:2014-05-02 11:58:15
【问题描述】:
我确信这非常容易,但由于某种原因我无法理解。我正在使用psql 和devise。我有一个 user 模型,它有一个 expiration 列。我想要做的是,当用户登录时,设计也包括过期检查。
我已经覆盖了模型中的 active_for_authentication? 方法,看起来像这样:
def active_for_authentication?
super && expiration > Time.now.to_s(:db)
end
但现在它让每个人都进来了……
帮助我 Stackoverflow,你是我唯一的希望!
编辑我在更新之前这样设置过期时间,其中amount 是一个动态变量:
self.expiration = amount.weeks.from_now
EDIT 2 Rails 控制台这样说:
#<User:xxx> {:expiration => Mon, 24 Mar 2014 19:19:42 UTC +00:00}
2.0.0p0 :013 > Time.now
2014-03-24 13:10:47 -0700
显然它们是不同的,这就是为什么我认为它们不起作用。我想知道的是是否缺少一些简单的转换,例如:.to_s(:db) 或者我是否必须进行某种字符串比较。
【问题讨论】:
-
你为什么说
self.expiration是DateTime?为什么3.weeks.from_now > Time.now不会返回true?...我有什么问题吗? -
因为数据库中的列是日期时间格式。 (这可能不正确,但我认为应该是这样)
-
试试
3.weeks.from_now.class#=> ActiveSupport::TimeWithZone,还有User.last.created_at.class#=> ActiveSupport::TimeWithZone
标签: ruby-on-rails postgresql datetime devise