为什么我的Rails找到查询选择所有记录?

时间:2015-06-10 20:41:36

标签: ruby-on-rails ruby

我沿着以下几行运行了一些代码:

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

如您所见,我忘记在.each之后添加find。这似乎导致在send_email表中的每条记录上调用my_user_model。我不明白为什么会这样。有人可以解释一下吗?

我是ruby和rails的新手,所以我假设我只是不了解块如何工作或类似的东西。

1 个答案:

答案 0 :(得分:4)

将块传递给find会改变方法的行为。最终发生的是它将加载所有模型,然后仅返回所提供的块返回true的模型,与Enumerable#find的工作方式不同。

如果你做了类似的事情:

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

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

一般来说,你想把它写成:

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