【发布时间】:2013-11-05 12:25:45
【问题描述】:
我正在为我的应用程序创建一个 UserSession 模型,其范围为 active 用于上周活动的会话。
一切正常,直到我在登录后尝试使用该应用程序 - 我能够登录并创建一个会话,并且它能够通过 user_id 找到我的用户。但是,Rails 正在生成不返回任何会话的 SQL,因此我实际上无法使用该应用程序。
这是模型的相关代码:
scope :active, -> { where('accessed_at >= ?', 2.weeks.ago)
def self.authenticate(key)
self.active.find_by(key: key)
end
这是我调用UserSession.authenticate('123345')时生成的SQL
SELECT `user_sessions`.* FROM `user_sessions` WHERE `user_sessions`.`key` = '123345' AND (accessed_at >= '2013-10-12 10:50:52') LIMIT 1
如上所示,它将范围 lambda 中的条件包装在括号中,这使得 SQL 有效但不返回必要的数据。有什么方法可以使scope 不带括号?
【问题讨论】:
-
去掉括号会有什么不同...去掉括号会给你想要的数据??
-
你想到了什么括号?我可以在 SQL 中看到 one 对括号,它们对语义有 zero 影响。
标签: ruby-on-rails ruby-on-rails-4 rails-activerecord mysql2