2017-06-05 35 views
1

我對ActiveAdmin工作,我想用一個計數器來顯示列名Active Jobs導軌 - ActiveAdmin創建關係數列排序

有參與讓這個計數

1. Staffroom 
2. StaffroomPage 
3. Job 



class StaffroomPage < ActiveRecord::Base 
    belongs_to :staffroom 

class Staffroom < ActiveRecord::Base 
    has_one :staffroom_page 
    has_many :jobs 

class Job < ActiveRecord::Base 
    belongs_to :staffroom 

現在三款車型在admin/staffroom_pages.rb裏面我能夠顯示的列和計數

column :active_jobs, sortable: 'active_jobs' do |staffroom_page| 
    staffroom_page.staffroom.jobs.where(:state=> 'active').count 
end 

但是我不能夠通過對數據進行排序,我看到下面的錯誤

PG::UndefinedColumn: ERROR: column "active_jobs" does not exist

所以現在的問題是如何使排序爲active_jobs列工作,請注意,這不是頁面上唯一的可排序的列,幾乎所有的列進行排序,並且這是唯一一個不工作。

回答

1

this post在activeadmin github上可能解決這一問題將是

index do 
    column :active_jobs, sortable: 'active_jobs' do |staffroom_page| 
    staffroom_page.staffroom.jobs.where(:state=> 'active').count 
    end 
end 

controller do 


def scoped_collection 
    super.joins(
    %(LEFT JOIN "jobs" ON "staffroom_pages"."staffroom_id" = "jobs"."staffroom_id" 
     AND "jobs"."state" = 'active')) 
     .select('staffroom_pages.*, COUNT(jobs.id) as active_jobs') 
     .group('staffroom_pages.id') 
    end 
end 
+0

感謝您的關注,這會導致錯誤PG :: UndefinedTable:錯誤:缺少表格「作業」的FROM-clause條目 LINE 1:... staffrooms「ON」staffroom_pages「。」staffroom_id「=」工作「。」st ... – Saadia

+0

我的壞,我原本以爲通過staffroom表加入,但後來我意識到,因爲兩個表都有相同的外鍵,你可以跳過那個加入,但我忘了改變我是什麼表加入。編輯 –

+0

現在它似乎抱怨PG :: UndefinedColumn:錯誤:列「活動」不存在LINE 2:和「工作」。「狀態」=「活躍」在哪裏「staffroom_pages ... – Saadia