基于项目模型的自定义过滤器/范围

时间:2012-12-08 03:46:13

标签: ruby-on-rails ruby-on-rails-3 squeel

我会尽量简短,但需要一些细节。我正在尝试对自定义项目管理系统的重写(在Rails中)进行原型设计。主要目的是帮助在阿拉巴马州重新安置或扩建的公司招聘,筛选和雇用他们的员工。目前的系统运行在4D和Active4D上,这是大多数人从未听说过的。可怕的数据库,但体面的桌面客户端/服务器系统。

对于那些可能没有听过的人,他们在阿拉巴马州建立了梅赛德斯,本田和现代汽车,这些公司的大多数员工都是通过该机构使用这个系统雇用的。除了大家伙之外,还有许多其他公司使用这家经济发展机构来选择他们的员工队伍。这个过程主要是一个项目,其目标是雇用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 个答案:

答案 0 :(得分:0)

对于长篇文章感到抱歉,但有时你必须先弄清楚你要弄清楚的内容,然后才弄明白!

我的解决方案最终回到了我的通用评估引擎,并编写了一种方法,可以对教育和与Citizens模型相关的其他内容进行评分。引擎通常从问答形式中得分。我只需要创建一个分数对象。然后该分数是选择过滤器的一部分。

我仍然希望扩展过滤器功能,并且从Ransack wiki上的帖子开始,看起来它创建了一个搜索对象(json?),可以捕获并可能隐藏在与项目相关的某个位置。

再次,我为长篇大论道歉。