gpt4 book ai didi

ruby-on-rails - 为什么我的 Rails 查找查询选择了所有记录?

转载 作者:数据小太阳 更新时间:2023-10-29 07:55:32 26 4
gpt4 key购买 nike

我按照这些行运行了一些代码:

MyUserModel.find([id1, id2, id3]) do |record| send_email(record) end

如您所见,我忘记在 find 之后包含 .each。这似乎导致 send_emailmy_user_model 表中的每条记录 上被调用。我不明白为什么会这样。谁能解释一下?

我是 ruby​​ 和 rails 的新手,所以我想我只是不了解 block 的工作原理或类似的东西。

最佳答案

将 block 传递给 find 会更改该方法的行为。最终发生的是它将加载所有模型,然后仅返回那些提供的 block 返回 true 的模型,这与 Enumerable#find 的工作方式没有什么不同。

如果你做了类似的事情:

MyUserModel.find { |m| [1,2,3].include?(m.id) }

然后你会有一个等效的版本,尽管这个版本要慢得多,因为必须加载所有记录而不是在数据库级别进行过滤。

通常你会想这样写:

MyUserModel.where(id: [ 1, 2, 3 ]).each do |model|
# ...
end

关于ruby-on-rails - 为什么我的 Rails 查找查询选择了所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30766903/

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