我想知道返回记录的方法最快。
Class.where(:type => 4).first
Class.find(:first, :conditions => ["type = ?", 4])
执行完全相同吗?
答案 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
因此,
take
与first
的记录顺序有所不同。first
将根据主键的顺序返回第一条记录,而take
将仅返回数据库首先弹出的所有记录。因此,虽然使用
where().take
等效于find_by
,并且选择是否使用其中一个只是一个品味问题,但where().first
与find_by
的区别在于不太明显。