有没有办法确定Ruby订单列的优先级?

时间:2017-09-01 06:19:25

标签: sql ruby-on-rails ruby

我在模型上有一个订单条款:

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

之后,scope调用了几个where sorted个方法。

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

由Rails构建的SQL语句将有order by 3列,(first_namelast_name,最后一列来自the param sent from the filters。 除非教师具有相同的first and last name,否则数据集永远不会被所需的列排序。

如果存在排序参数,是否有办法确定订单栏的优先顺序?

2 个答案:

答案 0 :(得分:3)

  

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

我认为它看起来像这样:

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')

答案 1 :(得分:2)

如果参数存在,你可以在关系上调用reorder,但是你必须再次指定所有字段,所以不太有吸引力。

  

用指定的顺序替换在关系上定义的任何现有订单

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

根据我的意识,您无法说“我希望此order值在先前设置的order之前显示