2017-05-29 34 views
0

我試圖使用custom_order來呈現任意的初始順序。自定義順序忽略SQL ORDER BY代碼

# GET /sequences 
def index 
@sequences_grid = initialize_grid(Sequence, 
    enable_export_to_csv: false, 
       per_page: 10, 
      custom_order: { 
    'sequences.username' => "CASE WHEN username LIKE '#{current_user.username}' THEN 0 ELSE 1 END, username" 
         }, 
        name: 'seq_g1') 
end 

這個想法是讓當前用戶的記錄過濾到列表的頂部。

用戶指南指出「這些鍵是數據庫列的完全限定名稱,並且規定了要在ORDER BY子句中使用的所需SQL塊」。

SQL代碼在數據庫編輯器中運行時按預期工作,但網格不顯示所需的順序。

日誌在任何wice_grid問題保持沉默和報告的要求是:

10:10:35 web.1 | Sequence Load (0.3ms) SELECT distinct username FROM "sequences" ORDER BY username asc 
10:10:35 web.1 | Sequence Load (0.3ms) SELECT distinct classtype FROM "sequences" ORDER BY classtype asc 
10:10:35 web.1 | Sequence Load (0.2ms) SELECT distinct description FROM "sequences" ORDER BY description asc 
10:10:35 web.1 | Sequence Load (0.2ms) SELECT distinct sequencenumber FROM "sequences" ORDER BY sequencenumber asc 
10:10:35 web.1 | Sequence Load (0.2ms) SELECT distinct target FROM "sequences" ORDER BY target asc 
10:10:35 web.1 | Sequence Load (0.2ms) SELECT distinct indicator FROM "sequences" ORDER BY indicator asc 

我懷疑SQL代碼可能以某種方式錯位,但之前我深入挖掘我以爲有人可能已經撞上了類似的問題?

Regards, Tom。

回答

0

經過一段時間的mon I後,我發現SQL很好,但您需要指定順序以及custom_order。

用戶指南規定,因此,看來是有點誤導的例子...

@hosts_grid = initialize_grid(Host, 
    custom_order: { 
'hosts.ip_address' => 'INET_ATON(hosts.ip_address)' 
       }) 

但示例提供...

@status_grid1 = initialize_grid(Status, 
    order: 'statuses.name', 
    custom_order: { 
    'statuses.name' => 'length(?)' 
    } 
) 

所以下面做了我需要的...

# GET /sequences 
def index 
@sequences_grid = initialize_grid(Sequence, 
    enable_export_to_csv: false, 
       per_page: 10, 
       order: 'sequences.username', 
      custom_order: { 'sequences.username' => "CASE WHEN sequences.username LIKE '#{current_user.username}' THEN 0 ELSE 1 END, username, updated_at" }, 
     order_direction: 'desc', 
        name: 'seq_g1') 
end 

...即它創建了一個列表,其中當前用戶的記錄是在聽d首先按照updated_at的降序排列,然後是其他用戶的記錄。