我正在尝试在给定作业的显示页面上显示相关作业。当用户查看任何特定作业时,应根据标签(我使用act-as-taggable-on gem)显示所有相关作业(必须根据其重量显示),作业功能(作业has_many:job_functions) ,经验和国家(我使用国家选择宝石)。
如果有一项工作,所有这些条件与给定的工作相似,那么它的权重= 100
否则,如果另一个只有标签,工作职能和国家相似的工作,那么它的权重= 70。所以我可以根据重量来分类工作
其实我只是根据标签找到相关工作
@related_jobs = Job.tagged_with(@job.tag_list, any: true)
我还可以找到基于工作职能的相关工作
@related_jobs = Job.includes(:functions)
.where('jobs.id != ?', @job.id)
.where(functions: { id: @job.functions.pluck(:id) } )
答案 0 :(得分:0)
根据一些标准查找相关的工作,并根据“匹配的接近程度”对相关工作进行加权,这听起来似乎是Job类的任务。我在Job类中创建了一个方法(也许是'get_related_weighted_jobs')。
在该方法中,使用Job实例的属性查找并为其他匹配作业分配权重,然后返回已排序列表。控制器只是加载要显示的作业,然后要求该作业找到它的匹配。
def show
@job = Job.find(params[:id])
@related_jobs = @job.get_related_weighted_jobs()
end