【发布时间】:2011-10-31 03:44:09
【问题描述】:
在 Rails 3 中,当我编写时:
@users = User.limit(10).sort_by(&:name)
它按名称顺序给了我 10 个用户,但不是我想要的按字母顺序排列的前 10 个用户。我做错了什么?
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord
在 Rails 3 中,当我编写时:
@users = User.limit(10).sort_by(&:name)
它按名称顺序给了我 10 个用户,但不是我想要的按字母顺序排列的前 10 个用户。我做错了什么?
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord
试试:
@users = User.limit(10).order('name ASC')
【讨论】:
sort_by 方法来自 Enumerable。因此,为了调用sort_by,ActiveRecord 必须从数据库中检索记录; ActiveRecord 将首先执行此操作:
User.limit(10)
从数据库中获取 10 条记录,然后这些记录将使用它们的名称进行排序(在 Ruby 中)。最终结果是记录在排序之前已经从数据库中提取出来。
解决办法是听Alex Peattie,使用order方法。
【讨论】: