2012-11-04 44 views
0

您好我剛剛根據Ryan Bates的指導從服務器加載數據,因爲客戶端與數據表交互。來自Rails的Ajax數據表格

http://railscasts.com/episodes/340-datatables?view=asciicast

在他的ProductsDataTable類,他定義了一個排序函數:

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

基本上列名來查詢數據庫,所以「名」,「類別」等都是屬性到產品模型。所以一個SQL SELECT語句生成的名稱或類別被用於排序ASC或DESC ..等等...

如果我有數據顯示在一個列中沒有顯式映射到一個屬性..這樣作爲product.reviews.count,我將如何允許對該列進行排序?

+0

#Abram我有同樣的問題,但我沒有看到如何實現答案。你有工作樣本分享嗎? – Reddirt

回答

0

您需要像這樣

def sort_column 
    columns = ['name', 'category', 'released_on,' 'price', 'number_of_reviews] 
    columns[params[:iSortCol_0].to_i] 
    end 

但這意味着你需要改變你得到你的數據的方式,例如:

Product.where(…).select('name, category, count(reviews.id) as number_of_reviews').group('name, category').includes('reviews') 

我一直無法測試columns的定義,你可能不得不使用reviews.number_of reviews而不是

+0

感謝您的提示。我認爲它可能會工作,但我幾乎立即掛斷了..而不是產品,我使用'style'>> Style Load(0.6ms)SELECT count(reviews.id)as num_reviews FROM「styles」 ActiveRecord: :StatementInvalid:PG :: Error:錯誤:缺少表格「評論」的FROM-clause條目 LINE 1:SELECT count(reviews.id)as num_reviews FROM「styles」 – Abram

+1

日誌顯示錶「missing from-clause」條目「評論」。所以你需要在你的選擇中加入:在你的'where'語句之前或之後鏈接'includes(:reviews)' – Pierre

+0

謝謝Pierre,並且哎呀! – Abram

0

我知道這是一個真正的舊帖子(現在),但只是想讓你知道在這個寶石:https://github.com/antillas21/ajax-datatables-rails可以幫助你很容易地開始創建數據表類,如你提到的Railscast中所描述的(它實際上基於這種相同的模式)。

gem所做的是讓您專注於編寫查詢以從數據庫檢索模型數據以及如何在jquery.dataTables需要的JSON中公開它。

把它作爲一個旋轉。