2011-08-17 79 views
1

我的模型有一個奇怪的排序問題。ActiveRecord關係的排序問題

考慮以下幾點:

  • 我有一個名爲CV模型,其中有許多職業和技能,並鏈接到一個國家。
  • 我也有一個名爲空缺的模型,它有一個職業和許多技能,也與一個國家有關。

在我的控制器,我的下面幾行代碼:

@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%的相關性,英國

我應該怎麼改/做的就是它 像那樣?

回答

0

問題出在排序算法中。 我使用了|運營商而不是運營商。

0

我會嘗試在控制檯中對此進行故障排除。你幾乎肯定會在@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}" } 

看看它是否顯示了你不期望看到的任何東西。從你的「當前輸出」例子看來,也許排序是基於某個字符串的長度與數組的長度或可枚舉的長度。