2012-12-08 95 views
0

我會盡量簡短,但需要一些細節。我試圖在一個自定義項目管理系統中重寫(在Rails中)。主要目的是幫助在阿拉巴馬州重新安置或擴張的公司招聘,篩選和僱用其員工。目前的系統運行在4D和Active4D上,這是大多數人從未聽說過的。可怕的數據庫,但體面的桌面客戶端/服務器系統。基於項目模型的自定義過濾器/範圍

對於那些可能沒有聽說過的人來說,他們在阿拉巴馬州建立梅賽德斯,本田和Hyundais,這些公司的大部分員工都是通過該機構僱用的。除了大傢伙之外,還有許多其他公司使用這家經濟發展機構來選擇他們的員工隊伍。這個過程主要是一個項目開始,目標是僱用x個員工。候選人是從州公民招募的。候選人經歷一個有多個階段或階段的選擇過程 - 主要是申請,面試,評估,培訓和錄用。每個項目都不同,可能有一些自定義階段。每個階段可能有許多以某種方式評分的評估(在線申請,面試評分表等)。在每個階段完成評估後,候選人進入下一階段,或從項目中消除。

雖然目前的數據庫結構沒問題,但我們試圖做一些改進。下面的模型和關係是當前原型的片段,從公民到項目的頂部。爲了更好地瞭解數據庫結構,添加了一些通過關係。我忘了指出每個項目可能有不同的程序,這些程序通常都是基於工作的。還有很多其他模型可以幫助管理過程(時間表事件,管理指導員等),這些模型沒有被描述。

class Citizen < ActiveRecord::Base 
    has_one :user, :as => :loginable 
    has_many :candidates 
    has_many :educations 
    has_many :work_histories 
    has_many :skills 
end 
class Candidate < ActiveRecord::Base 
    belongs_to :program 
    belongs_to :citizen 
    has_many :progressions 
end 
class Progression < ActiveRecord::Base 
    belongs_to :candidate 
    belongs_to :stage 
    has_many :scores 
    has_one :citizen, :through => :candidate 
end 
class Stage < ActiveRecord::Base 
    belongs_to :program 
    has_many :assessors, :dependent => :destroy 
    has_many :progressions, :dependent => :destroy 
    has_many :candidates, :through => :progressions 
    has_many :citizens, :through => :candidates 
    has_many :educations, :through => :citizens 
end 
class Program < ActiveRecord::Base 
    belongs_to :project 
    has_many :stages, :order => "sequence", :dependent => :destroy 
    has_many :candidates, :dependent => :destroy 
end 

有一個問題來了!舞臺模型是系統的關鍵部分,因爲它是候選人選擇進入下一階段的地方。由於目前的系統是在在線存在之前設計的,因此半靜態信息(如教育,技能,工作歷史)沒有明確定義,並作爲在線應用程序的評估添加 - 導致靜態信息的重複(Citizens申請多個項目並且必須重複作爲其簡介的一部分的信息)。原型仍然希望評估一些信息(您是否擁有高中文憑或GED?)以及定製程序特定評估(您有多少年的焊接經驗?)。

我們認爲我們可以編寫過濾器搜索來篩選該靜態信息並將其與自定義評估分數結合起來 - 這樣做容易。每個項目可能都在尋找不同的教育和技能要求。這幾乎就像我需要爲每個項目/程序定製一個範圍。我只是開始考慮像Ransack和Squeel這樣的事情,他們可能會提供幫助,但是一直使用相同的過濾器將取決於篩選器。

之前的過濾方法,我雖然要添加一個功能,我寫了評估引擎以某種方式查詢靜態信息基本上是一個問題和答案,並得分。問題在於,你將如何處理一個過濾器,以尋找具有特定教育成就,具有不同技能的具體經驗水平,在當前進度等方面具有特定狀態等等的公民,然後根據不同計劃對其進行定製?

當然,我不是在尋找一個具體的答案,但方法。

+1

是的,這是**的方式**太羅嗦。祝你得到幫助;我個人不會通過*(例如,您完全可以輕鬆完成前兩個段落)*。 – deefour

回答

0

對不起,很長的文章,但有時你必須寫出你想弄清楚什麼,然後再想出來!

我的解決方案最終回到了我的通用評估引擎,並編寫了一個方法來評分教育和其他與公民模型相關的東西。引擎通常從問題/答案表單中得到答案。我只需要創建一個評分對象。得分是選擇過濾器的一部分。

我仍然想要擴展過濾功能,並且從Ransack wiki上的一篇文章看,它看起來像創建了一個搜索對象(json?),該對象可以被捕獲並可能隱藏在與項目相關的某個位置。

再一次,我爲這篇長文章道歉。