我有以下查询。 ASSOC是产品类别名称。
q = params[:category]
@products = Product.where("ISBN = ?" ,q).order('ASSOC')
我得到的内容如下:
16 CHANNEL SECURITY DVRS
32 CHANNEL SECURITY DVRS
4 CHANNEL SECURITY DVRS
8 CHANNEL SECURITY DVRS
我想要的是:
4 CHANNEL SECURITY DVRS
8 CHANNEL SECURITY DVRS
16 CHANNEL SECURITY DVRS
32 CHANNEL SECURITY DVRS
答案 0 :(得分:0)
order
方法只是将ORDER BY
子句传递给数据库,由DB来提供实际的顺序。大多数数据库应该能够将您的字符串拆分成数字,并按数字顺序排序,而不是按字母顺序排序。我不确定你使用的是什么数据库,但这里有一个问题/答案显示如何为MySQL做这个:MySQL order by string with numbers
您可以通过在ORDER BY
的调用中直接包含SQL来从Rails发送更长的order
子句,例如:
order('SUBSTR(col_name FROM 1 FOR 1), CAST(SUBSTR(col_name FROM 2) AS UNSIGNED)')
作为替代方案,您可以避免使用order
方法然后使用Ruby对结果进行排序(但效率会降低,因此如果您的数据库无法按照我的描述进行排序,那么您应该只进行排序上文)。