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