使用Ruby on Rails模型

时间:2011-06-21 01:43:33

标签: ruby-on-rails ruby models

我是ruby on rails的新手,对 Rails 3 的性能和最佳实践有一个(可能很简单)的问题。我正在使用一个名为enki blog的博客引擎,我看到编写此博客引擎的人正在使用以下技术选择标签:

Tag.find(:all).reject {|tag| tag.taggings.empty? }.sort_by {|tag| tag.taggings_count }.reverse

我认为没有“.reject”的目的,因为每当创建,更新或销毁文章时都会删除空标签。假设我是对的,这会是一个更好的方法吗?

Tag.find(:all, :order => "taggings_count desc")

我正在寻找性能和可读性。深入挖掘模型结果的最佳方法是什么? “.sort_by”和传递之间是否有任何真正的区别:作为参数订购?

提前感谢您的任何答案。

1 个答案:

答案 0 :(得分:2)

你是对的,这肯定是一些低效的代码。

sort_by和:order之间存在显着差异。 :order用于构建SQL语句,这意味着数据库在返回记录之前对其进行排序。 sort_by是一个Ruby方法,它重新排列数据库已经返回的记录。通常数据库会更快,所以用户:订单。

我不能说是否有必要拒绝。但是如果,那么使用WHERE语句在数据库中再做它会更快。所以你会有

Tag.find(:all, :conditions => "taggings_count > 0", :order => "taggings_count desc")

在Rails 3中看起来像

Tag.where('taggings_count > 0').order('taggings_count desc')