【发布时间】:2011-06-21 01:43:32
【问题描述】:
我是 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”和传递 :order 作为参数之间有什么真正的区别吗?
提前感谢您的任何回答。
【问题讨论】:
-
你在使用 rails3 吗?如果我没记错的话,带有附加参数的
find(例如:order)已被弃用。我建议Tag.order("taggings_count desc")更干净:) -
是的,我正在使用 rails 3. Tag.order("taggings_count desc") 和 Tag.find(:all, :order => "taggings_count desc") 做同样的事情?它是否隐式选择全部?如果是这样,.order 是否具有与参数化版本相同的性能水平?
-
它将在 Rails 3.1 中被弃用。没有理由在新项目中使用旧式语法。如果您好奇,我建议您观看the railscast 以了解差异。
-
更好地观看@Semyon Perepelitsa 的 railscast 链接。简而言之,
find减少到只有 1 个参数,可能是:all / :first / :last / ID。这些条件是单独的方法(where / order / join etc返回 ActiveRelation(在实际使用记录之前不查询数据库,例如调用.all / .first etc)。
标签: ruby-on-rails ruby models