ruby-on-rails - ActiveRecord 关系的排序问题

标签 ruby-on-rails arrays algorithm sorting

我的模型有一个奇怪的排序问题。

鉴于以下情况:

  • 我有一个名为 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/

相关文章:

ruby-on-rails - Carrierwave gem 安全文件路径无法读取文件错误

javascript - 按值复制数组

algorithm - 从 N 个整数数组中选择有序三元组的不同方法

arrays - 使用 6 种面额找零的快速算法 : Interview Practice

ruby-on-rails - Rails 如何从 dateTime 中删除 UTC 偏移文本 ('UTC' ) 只留下 DateTime?

ruby-on-rails - Ruby Rails Devise 和 SAML 与 Office 365

ruby-on-rails - Heroku 上的 Rails database.yml 文件的生产条目

c# - 将数组添加到 web.config 中的键

arrays - 科学/ NumPy : summation over multiple indices

java - 一种算法,其中最终输出在 y 和 x 之间随机选择,但获得高值的机会较低