例如,用户 = 从用户列表中查找第一个Fred。
User.find_by(first_name: 'Fred') # 它会找到第一个用户
http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_by
first
。我在下面的答案中解释了它。 - Flavio Wuensche
user = User.where(:name => "Fred").order(:age).first
find_by
:User.find_by(name: 'Fred')
这个方法已经在Rails 4中添加,定义如下:
def find_by(*args)
where(*args).take
end
take
和 first
在顺序上有所不同。在重新按主键排序记录后,first
将返回第一条记录,而 take
将返回它发现的任何记录。
因此,使用 where().take
等效于 find_by
,选择使用其中之一是口味问题,但是 where().first
与 find_by
的区别微妙且不太明显。
来源:https://github.com/rubocop-hq/rails-style-guide/issues/76
你可以按照以下方式使用find_by
User.find_by_first_name('Fred')
显然,它给了Fred的第一个用户。
如果使用find或where命令访问User模型,它将始终返回按照created_at排序的第一条记录。您可以根据参数对数据进行排序。