rails控制器自定义文本顺序

时间:2018-03-31 12:49:10

标签: ruby-on-rails ruby activerecord

我的模型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')`

1 个答案:

答案 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)