gpt4 book ai didi

ruby-on-rails - 为什么 Rails 将我的作用域参数括在括号中?

转载 作者:行者123 更新时间:2023-12-05 05:27:29 24 4
gpt4 key购买 nike

我正在为我的应用程序创建一个 UserSession 模型,其范围 active 用于上周事件的 session 。

直到我尝试在登录后使用该应用程序时一切正常 - 我能够登录并创建 session ,并且它能够通过 user_id 找到我的用户。但是,Rails 正在生成不返回任何 session 的 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 在语义上是正确的。 Rails 将每个级别的作用域都包裹在它自己的一组括号中,以确保正确的执行顺序。

下面执行时没有区别:

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

您确定有满足该查询的记录吗?

关于ruby-on-rails - 为什么 Rails 将我的作用域参数括在括号中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19605870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com