我在模型上有一个订单条款:
sorted = Teacher.order('teachers.first_name asc, teachers.last_name asc')
之后,scope
调用了几个where
sorted
个方法。
最后,如果存在排序参数,则会在sorted
上调用订单。
由Rails构建的SQL语句将有order by
3列,(first_name
,last_name
,最后一列来自the param sent from the filters
。
除非教师具有相同的first and last name
,否则数据集永远不会被所需的列排序。
如果存在排序参数,是否有办法确定订单栏的优先顺序?
答案 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
值之前显示