2016-10-17 16 views
1

我正在使用datatable在我的rails應用程序到用戶index頁面。我的第一個columnindex頁面是created_at。此column中的data看起來像Mon, 17-Oct-16。我想讓這個列按descorder這個日期格式排序。我怎樣才能做到這一點? 這是我試過的。但它沒有奏效。如何配置datatable,以便它將基於created_date命令(desc)記錄?

<script type="text/javascript"> 
    $(document).ready(function() { 
    var index = $('#reg_req_data_table').dataTable({ 
     "order": [[ 1, "desc" ]], 
     'aoColumnDefs': [{ 
     'bSortable': false  
    }], 
    "bLengthChange": false, 
    "sDom": '<"top"pfl>rt<"bottom"i><"clear">' 
     }); 
    }); 
</script> 
+0

我會使用Bates的railscast,並按照他的方法創建一個單獨的類來處理邏輯。它遵循Rails約定,並允許您處理大部分ruby操作,如排序。 – bkunzi01

+0

如果你想要一個完整的寫作,我會告訴你如何做到這一點「鐵軌」的方式。只要讓我知道,如果你還沒有解決它。 – bkunzi01

+0

沒有解決。請用鐵軌方式幫助我 – John

回答

0

這個答案將告訴你如何遵循Rails的約定和處理祭出背出爲JSON到數據表之前的紅寶石類排序。另外,如果您處理的記錄超過數百條,強烈建議您使用服務器端處理,而不是客戶端處理(此示例將顯示服務器端),處理速度要快得多:

您的用戶#索引動作應該是:

def index 
    respond_to do |format| 
    format.html 
    format.json { render json: UsersDatatable.new(view_context) } 
    end 
end 

你應該在你的應用程序文件夾中創建子文件夾命名的數據表,然後添加此.RB文件到它:

#app/datatables/users_datatable.rb Notice it's called users_datatable! Rails will infer the proper class lookup path because of this. 
class UsersDatatable 
    delegate :params, :h, :link_to, to: :@view 

    def initialize(view) 
    @view = view 
    end 

    def as_json(options = {}) 
    { 
     sEcho: params[:sEcho].to_i, 
     iTotalRecords: User.count, 
     iTotalDisplayRecords: users.total_entries, 
     aaData: data 
    } 
    end 

private 

    def data 
    users.map do |user| 
     [ 
     user.created_at.strftime("%d-%b-%y") 
     ] 
    end 
    end 

    def users 
    @users ||= fetch_users 
    end 

    def fetch_users 
    users = User.all.order("created_at DESC") 
    users = users.page(page).per_page(per_page) 
    if params[:search].present? && params[:search]["value"].present? 
     users = users.where("email like :search", search: "#{params[:search]["value"]}%") 
    users 
    end 

    def page 
    params[:start].to_i/per_page + 1 
    end 

    def per_page 
    params[:length].to_i > 0 ? params[:length].to_i : 10 
    end 

    def sort_column 
    columns = %w[created_at ] 
    columns[params[:order]["0"]["column"].to_i] 
    end 

    def sort_direction 
    params[:order]["0"]["dir"] == "desc" ? "desc" : "asc" 
    end 
end 

現在您的相應用戶查看index.html.erb應該是:

<div class='table-responsive'> 
    <table id='reg_req_data_table' data-source="<%= users_path(params.merge!(format: :json).deep_symbolize_keys)%>"> 
    <thead> 
    <tr> 
     <th>Created On:</th> 
    </tr> 
    </thead> 
    <tbody> 
    </tbody> 
</table> 
</div> 

<script type="text/javascript"> 
    $(document).ready(function() { 
    $('#reg_req_data_table').DataTable({ 
     "serverSide": true, 
     "ajax": {url: '<%= users_path(params.merge!(format: :json).deep_symbolize_keys)%>', type: "POST"}, 
     "processing": true 
    }), 
    }); 
</script> 

請注意,表格標籤中沒有任何內容。服務器處理設置數據表通過json接受這些信息,這是我們在UsersDatatable類中發送的信息。

相關問題