Rails:高级SQL查询

时间:2015-01-23 20:56:14

标签: sql ruby-on-rails ruby ruby-on-rails-4 matching

我正在尝试在给定作业的显示页面上显示相关作业。当用户查看任何特定作业时,应根据标签(我使用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) } )

1 个答案:

答案 0 :(得分:0)

根据一些标准查找相关的工作,并根据“匹配的接近程度”对相关工作进行加权,这听起来似乎是Job类的任务。我在Job类中创建了一个方法(也许是'get_related_weighted_jobs')。

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

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