Rails: 高级 sql 查询

Rails: Advanced sql query

我正在尝试在给定职位的显示页面上显示相关职位。当用户查看任何特定工作时,应根据标签(我正在使用 acts-as-taggable-on gem)、工作功能(工作 has_many:job_functions), experience & country(我用的是country-select gem).

如果某项工作的所有条件都与给定的工作相似,则该工作的权重 = 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) } )

根据一些标准寻找相关工作,并根据 "closeness of match" 对相关工作进行加权,这听起来确实像是工作 class 的任务。我会在作业 class 中创建一个方法(可能 'get_related_weighted_jobs')。

在该方法中,使用作业实例的属性查找其他匹配作业并为其分配权重,然后 return 排序列表。控制器只会加载要显示的作业,然后要求该作业找到它的匹配项。

def show
  @job = Job.find(params[:id])
  @related_jobs = @job.get_related_weighted_jobs()
end