2017-06-05 65 views
1

我有以下方法:未定義的方法`PAGINATE」爲#<PG ::結果:0x007f8f096a3390(轉換AREL結果)

@vulnerabilities = Vulnerability.details(filter_version_param, 
        filter: filter, 
        sort: order) 
        .paginate(page: page_param, per_page: 10) 

這種方法的內部使用AREL找到相關的信息顯示在頁面。然而,當我碰到從will_paginate寶石.page方法,我收到以下錯誤:

`undefined method `paginate' for #<PG::Result:0x007f8f096a3390>` 

這是適時的事實,返回的對象不是來自ActiveRecord的一類。我的問題是,是否有辦法將PG類轉換爲ActiveRecord模型?先前的另一個開發人員的應用程序實現將創建一個Struct.new()類,並將值提供給它。我想知道如果有更簡單的方法來做到這一點。

+0

它看起來像'details'函數沒有返回'ActiveRecord :: Relation',請先嚐試執行'paginate'調用。 –

+0

是的,這確實是問題所在。分頁方法不能在'PG :: Result'上調用。它必須轉換爲關係。我想知道是否有辦法實例化它。 –

+0

你可以在'paginate'的結果上調用'details'函數嗎? –

回答

0

你有兩個選擇:

  • Kaminary gem as an example:查詢結果轉換成 數組,並使用Kaminary.paginate_array(array_of_result).page(#pagenumber).per(#elemnts per page),但因爲你需要加載孔表這樣纔能有大數據表問題例如,然後切片頁面!

  • 您可以構建一個對象,該對象具有paginator完成其工作所需的足夠方法。

有關上述兩點的更多解釋和信息,請點擊這裏link