找到第一个匹配记录的最有效方法是什么?

4
例如,用户 = 从用户列表中查找第一个Fred。

“first Fred” 是什么意思?是指用户列表中有很多个“Fred”,需要找到最先注册的那个“Fred”吗? - rony36
5个回答

5

这取决于你所说的“第一个”的含义,但是是的,这是最高效的方法。如果你关心顺序,你应该使用first。我在下面的答案中解释了它。 - Flavio Wuensche

1
如果您想按顺序排序并选择有序结果中的第一个记录,则以下内容也应该有效:

user = User.where(:name => "Fred").order(:age).first

1
最高效的方法是使用find_by
User.find_by(name: 'Fred')

这个方法已经在Rails 4中添加,定义如下:

def find_by(*args)
  where(*args).take
end

更详细地说,takefirst 在顺序上有所不同。在重新按主键排序记录后,first 将返回第一条记录,而 take 将返回它发现的任何记录。

因此,使用 where().take 等效于 find_by,选择使用其中之一是口味问题,但是 where().firstfind_by 的区别微妙且不太明显。

来源:https://github.com/rubocop-hq/rails-style-guide/issues/76


0

你可以按照以下方式使用find_by

   User.find_by_first_name('Fred')

显然,它给了Fred的第一个用户。


0

如果使用find或where命令访问User模型,它将始终返回按照created_at排序的第一条记录。您可以根据参数对数据进行排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接