2012-10-08 39 views
2

這是我第一次使用dataTables。我希望能夠顯示我的項目表中的記錄並按每個字段排序。我正在關注這個RailCast並使用他們提供的代碼。但是,我的頁面加載沒有錯誤,但實際記錄從未加載到表格中 - 它只是無限期地顯示「正在處理...」。任何想法會導致這種情況?我的一些代碼:RoR數據表從不加載數據?

視圖/項目/ new.html.erb(其中我的應用程序指向索引,在這裏我想表顯示)

<table id="projects" class="display" data-source="<%= projects_url(format: "json") %>"> 
    <thead> 
    <tr> 
     <th>File</th> 
     <th>Author</th> 
    </tr> 
    </thead> 
    <tbody> 
    </tbody> 
</table> 

projects.js.coffee

jQuery -> 
    $("#projects").dataTable 
    bProcessing: true 
    bServerSide: true 
    sAjaxSource: $('#projects').data('source') 
    "aaSorting": [[ 0, "desc" ]] 

項目控制器

# GET /projects/new 
    # GET /projects/new.json 
    def new 
    @projects = Project.all 
    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: ProjectsDatatable.new(view_context) } 
    end 
    end 

Projects_datatable.rb

class ProjectsDatatable 
    delegate :params, :h, :link_to, :number_to_currency, to: :@view 
    def initialize(view) 
    @view = view 
    end 

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

private 

    def data 
    projects.map do |proj| 
     [ 
     h(proj.filename), 
     h(proj.author) 
     ] 
    end 
    end 

    def projects 
    @projects ||= fetch_projects 
    end 

    def fetch_projects 
    projects = Project.order("#{sort_column} #{sort_direction}") 
    projects = projects.page(page).per_page(per_page) 
    if params[:sSearch].present? 
     projects = projects.where("name like :search or category like :search", search: "%#{params[:sSearch]}%") 
    end 
    projects 
    end 

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

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

    def sort_column 
    columns = %w[name category released_on price] 
    columns[params[:iSortCol_0].to_i] 
    end 

    def sort_direction 
    params[:sSortDir_0] == "desc" ? "desc" : "asc" 
    end 
end 

和我的項目遷移:

class CreateProjects < ActiveRecord::Migration 
    def change 
    create_table :projects do |t| 
     t.string :filename 
     t.string :location 
     t.string :author 
    end 
    end 
end 

如果任何人有任何輸入,我會非常感激。謝謝。

+0

我必須承認,你在下面的緊身控制器高脂模型概念很好,但是這個代碼是「氣味」。我喜歡你將所有可怕的東西隱藏到模型中,但你不能僅僅通過黑客來創建所有項目。你已經爲這個小任務創建了特殊模型,並且你絕對不能將所有的行爲都放在'view_context'上,因爲它的命名方式是有原因的。另外dataTables創建命名約定混沌。也許你應該嘗試[poirot](https://github.com/olivernn/poirot)? –

回答

0

答案肯定是有點晚了,但我可以在這些行看到一些錯誤:

projects = projects.where("name like :search or category like :search", search: "%#{params[:sSearch]}%") 

columns = %w[name category released_on price] 

必須更換的文件名,位置,筆者這些領域。

iTotalDisplayRecords: Project.count, 

也是錯誤的,與

iTotalDisplayRecords: projects.total_entries, 

取代它確保您有will_paginate