在select子句中排序,以支持许多列

时间:2011-04-10 22:30:36

标签: ruby-on-rails activerecord

我想根据以下内容从users表中选择用户:

user.created
user.sales_count

所以我想获取所有用户,有时按创建日期排序,有时基于sales_count。我希望能够在ASC或DESC订单之间切换。

所有查询都需要具有此WHERE子句:

WHERE region = 123

如何构建我的活动记录查询以按条件支持这些订单?

1 个答案:

答案 0 :(得分:1)

def get_users(options={})
  options[:order_col] ||= "created"
  options[:order_type] ||= ""
  User.where(:region=>123).order("#{options[:order_col]} #{options[:order_type]}")
end

options[:order_col] ||=真的在说:

options[:order_col] = options[:order_col] || ""

在英语中说如果设置为options[:order_col]options[:order_col],则另外明智""。我们可以将order_type设置为"",因为默认情况下SQL将命令结果为ASC。

示例:

get_users #=> return ordered by created ASC
get_users(:order_col => "sales_count") #=> return order by sales count ASC
get_users(:order_col => "sales_count", :order_type => "DESC") #=> sales_count, DESC
# etc