我的模型www.mydoian.com/shop/?min_price=101&max_price=200
包含Post
列和body
。
status
如何使订单不按字母顺序排列,而是自定义?
像:
# Post.rb:
STATUSES = ["Active", "Frozen", "Finished"]
# Posts_controller:
`@posts = Post.order('status DESC')`
答案 0 :(得分:1)
评论者建议使用enum
,这可能最适合您。您还可以尝试在数据库级别添加一个函数,让您自定义排序,具体取决于您的数据库。这是关于如何设置它的quick blog post。您的排序功能可能看起来像这样(上面引用的博客文章):
CREATE OR REPLACE FUNCTION custom_sort(anyarray, anyelement)
RETURNS INT AS
$$
SELECT i FROM (
SELECT generate_series(array_lower($1,1),array_upper($1,1))
) g(i)
WHERE $1[i] = $2
LIMIT 1;
$$ LANGUAGE SQL IMMUTABLE;
这为您提供了一个可以使用自定义排序调用的功能,因此您的排序可能如下所示:
ORDER BY custom_sort (ARRAY['Finished', 'Active', 'Frozen'], posts.status)