Ruby on rails 为什么Rails将我的作用域参数包装在括号中?

Ruby on rails 为什么Rails将我的作用域参数包装在括号中?,ruby-on-rails,ruby-on-rails-4,rails-activerecord,mysql2,Ruby On Rails,Ruby On Rails 4,Rails Activerecord,Mysql2,我正在为我的应用程序创建一个UserSession模型,其中一个作用域active用于上周活动的会话 在我尝试在登录后使用应用程序之前,一切都正常工作-我能够登录并创建会话,并且它能够通过user\u id找到我的用户。但是,Rails生成的SQL不返回会话,因此我无法实际使用该应用程序 这是模型的相关代码: scope :active, -> { where('accessed_at >= ?', 2.weeks.ago) def self.authenticate(key)

我正在为我的应用程序创建一个
UserSession
模型,其中一个作用域
active
用于上周活动的会话

在我尝试在登录后使用应用程序之前,一切都正常工作-我能够登录并创建会话,并且它能够通过
user\u 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')


如上所示,它将范围lambda中的条件封装在括号中,这使SQL有效,但不返回必要的数据。有没有办法使
范围
不带括号?

生成的SQL在语义上是正确的。Rails将每个级别的作用域包装在自己的括号中,以确保正确的执行顺序

执行时,以下各项之间没有区别:

SELECT  `user_sessions`.* FROM `user_sessions` WHERE `user_sessions`.`key` = '123345' AND (accessed_at >= '2013-10-12 10:50:52') LIMIT 1


您确定存在满足该查询的记录吗

如果你去掉括号会有什么不同…去掉括号会给你想要的数据??你想用什么括号?我可以在SQL中看到一对括号,它们对语义没有任何影响。妈的,在我深入研究它之后,它实际上是在每次更新时更改会话令牌,因为我在验证之前设置了一个
,以生成一个新令牌。你是完全正确的,它没有找到有效的记录。谢谢
SELECT  `user_sessions`.* FROM `user_sessions` WHERE `user_sessions`.`key` = '123345' AND (accessed_at >= '2013-10-12 10:50:52') LIMIT 1
SELECT  `user_sessions`.* FROM `user_sessions`  WHERE `user_sessions`.`key` = '123345' AND accessed_at >= '2013-10-12 10:50:52' LIMIT 1