Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么我的Rails查询选择了所有记录?_Ruby On Rails_Ruby - Fatal编程技术网

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

可能的重复我不认为这是一个确切的重复,但答案确实可以在上面的链接中找到。