2017-09-01 79 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') 
相關問題