2017-09-01 78 views
0

我有一个模型订单条款:有没有一种方法来优先化Ruby订单列?

sorted = Teacher.order('teachers.first_name asc, teachers.last_name asc') 

并多次scopewhere方法叫上sorted之后。

最后,如果存在排序参数,则在sorted上调用订单。

由Rails构建的SQL语句将有一个order by 3列(first_name,last_name和最后一个来自the param sent from the filters)。 数据集永远不会按照所需的列进行排序,除非有相同的教师first and last name

如果排序参数存在,有没有一种方法来优先排列订单列?

+1

_ “等几部[...]方法[...]继” _ - 你能举个例子吗? – Stefan

回答

2

如果参数存在,您可以在关系上调用reorder,但是您必须重新指定所有字段,因此不是很有吸引力。

替换据我所知的关系定义与指定的顺序

User.order('email DESC').reorder('id ASC') # generated SQL has 'ORDER BY id ASC' 

没有任何现有的订单,您可以说:“我想在此之前order值出现先前设置的order值为“

3

最后,在sorted上调用订单,如果为ort参数存在。

我认为它看起来在某种程度上是这样的:

sorted = Teacher.order('teachers.first_name asc, teachers.last_name asc') 
# ... 
sorted = sorted.order(sort_param) if sort_param 

有没有一种方式,如果排序参数存在的顺序列优先级?

只需重新排序方法调用相应:

sorted = Teacher.all 
# ... 
sorted = sorted.order(sort_param) if sort_param 
sorted = sorted.order('teachers.first_name asc, teachers.last_name asc') 
相关问题