Ruby on rails 为什么我的Rails查询选择了所有记录?
我运行了以下代码:Ruby on rails 为什么我的Rails查询选择了所有记录?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我运行了以下代码: MyUserModel.find([id1, id2, id3]) do |record| send_email(record) end 正如您所看到的,我忘记了在查找之后包含。每个。这似乎导致my\u user\u model表中的每条记录都被调用send\u email。我不明白为什么会这样。有人能解释一下吗 我不熟悉ruby和rails,所以我想我只是不了解块是如何工作的或类似的东西。将块传递给find会改变方法的行为。最终的结果是,它将加载所有模型,然后只返回所提供
MyUserModel.find([id1, id2, id3]) do |record| send_email(record) end
正如您所看到的,我忘记了在查找之后包含。每个。这似乎导致my\u user\u model
表中的每条记录都被调用send\u email
。我不明白为什么会这样。有人能解释一下吗
我不熟悉ruby和rails,所以我想我只是不了解块是如何工作的或类似的东西。将块传递给find
会改变方法的行为。最终的结果是,它将加载所有模型,然后只返回所提供的块返回的那些模型,这与可枚举#find
的工作方式不同
如果您做了如下操作:
MyUserModel.find { |m| [1,2,3].include?(m.id) }
然后您将有一个等效的版本,尽管这个版本要慢得多,因为必须加载所有记录,而不是在数据库级别进行过滤
一般情况下,您希望将其写成:
MyUserModel.where(id: [ 1, 2, 3 ]).each do |model|
# ...
end
可能的重复我不认为这是一个确切的重复,但答案确实可以在上面的链接中找到。