在Rails(ActiveRecord)中找到第一条记录的最快方法是什么?

时间:2012-08-27 02:56:09

标签: ruby-on-rails ruby-on-rails-3 activerecord

我想知道返回记录的方法最快。

Class.where(:type => 4).first
Class.find(:first, :conditions => ["type = ?", 4])

执行完全相同吗?

2 个答案:

答案 0 :(得分:3)

两者都会产生相同的查询。

According to the latest information, under Rails 3.1, passing in :conditions will be deprecated.

因此,现在,执行查询的最佳方法是使用:

Class.where(:type => 4).first

答案 1 :(得分:1)

假设您不关心订单,最有表现力的是使用find_by

Class.find_by(type: 4)

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

  

此方法已在Rails 4上添加,其定义如下:

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

因此,takefirst的记录顺序有所不同。 first将根据主键的顺序返回第一条记录,而take将仅返回数据库首先弹出的所有记录。

     

因此,虽然使用where().take等效于find_by,并且选择是否使用其中一个只是一个品味问题,但where().firstfind_by的区别在于不太明显。