我的模型有一个奇怪的排序问题。
鉴于以下情况:
- 我有一个名为 Cv 的模型,它有很多职业和技能,并且与一个国家相关联。
- 我还有一个名为 Vacancy 的模型,它具有一种职业和多种技能,并且还与一个国家相关联。
在我的 Controller 中,我有以下几行代码:
@occupations = Occupation.find params[:occupation_ids].split(' ')
@skills = Skill.find params[:skill_ids].split(' ')
@cv = Cv.find params[:cv_id]
@language = Language.resolve({:code => :en, :name => :en})
@vacancies = Vacancy.joins(:vacancy_skills).where('vacancy_skills.skill_id' => params[:skill_ids]).all.uniq.sort{ |x,y| (x.skills | @skills).length <=> (y.skills | @skills).length }
我们的想法是,所有职位空缺都按其相关性进行排序,相关性是根据所选技能 (@skils
) 与相关职位空缺技能之间的并集长度计算得出的。
当我运行代码时,我收到所有职位空缺,按国家/地区排序并按相关性排序,但我不希望它们按国家/地区排序,而是希望它们全部混合但按相关性排序 .
当前输出是:
- 空缺 1,100% 相关性,英国
- 空缺 2,90% 相关性,英国
- 空缺 3,10% 相关性,英国
- 空缺 4,90% 相关性,法国
- 空缺 5,70% 相关性,fance
期望的输出应该是这样的:
- 空缺 1,100% 相关性,英国
- 空缺 2,90% 相关性,英国
- 空缺 4,90% 相关性,法国
- 空缺 5,70% 相关性,法国
- 空缺 3,10% 相关性,英国
我应该改变/做些什么才能让它变成那样?
最佳答案
我会尝试在控制台中解决这个问题。您几乎肯定会在 @skills 或 _.skills(其中 _ 是 x 或 y)中得到您不期望的东西。将您的职位空缺集放入控制台中的一个变量中,然后更深入地了解您所看到的内容。
v = Vacancy.joins(:vacancy_skills).where('vacancy_skills.skill_id' => params[:skill_ids]).all.uniq
puts v.each {|vv| puts "#{vv.id}\t#{vv.skills.inspect}" }
看看它是否向您展示了您不希望看到的任何内容。从您的“当前输出”示例来看,在我看来,排序可能是基于某些字符串的长度与数组或可枚举的长度的顺序。
关于ruby-on-rails - ActiveRecord 关系的排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7092008/