gpt4 book ai didi

ruby-on-rails - 范围内的 find_by 正在触发 2 个查询

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

我正在使用 Rails 4.2.3 和 ruby​​ 2.2.1

我在角色模型中编写了一个范围如下:

应用程序/模型/角色.rb

scope :default, -> { find_by(default: true) }

现在当我跑
> Role.default

#this is the output I got.

Role Load (0.1ms) SELECT `roles`.* FROM `roles` WHERE `roles`.`default` = 1 LIMIT 1
Role Load (0.1ms) SELECT `roles`.* FROM `roles`
=> []

如您所见,这会触发 2 个查询并返回错误的结果。

我尝试使用类方法而不是范围
def self.default
self.find_by(default: true)
end

现在当我跑
Role.default

#this is the output I got

Role Load (0.2ms) SELECT `roles`.* FROM `roles` WHERE `roles`.`default` = 1 LIMIT 1
=> nil

使用类方法 find_by 工作正常。

我无法理解我在这里做错了什么。任何帮助,将不胜感激。提前致谢。

最佳答案

你不应该使用 find_by在范围内 - find_by实际上执行数据库查询。

您应该只使用返回更多范围的方法,例如 where , limit , order等等。

关于ruby-on-rails - 范围内的 find_by 正在触发 2 个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31329554/

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