2011-04-10 11 views
1

は私がに基づいてユーザーテーブルからユーザーを選択する多くの列をサポートしますsales_count。そして私は、ASCまたはDESCの順序を切り替えることができるようにしたい。注文は、

WHERE region = 123 

がどのように私は私のアクティブレコードクエリ条件によって、これらの順序をサポートするために構築することができます。

すべてのクエリは、このWHERE句を持っている必要がありますか?

答えて

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 
+0

これはしかしSQLインジェクションに開いてあなたを残していないのですか? – Blankman