我正在尝试选择一个随机记录,但唯一的工作方法似乎是一种可怕的性能负担。
第一次尝试,使用 Postgres 中的 RANDOM 函数 - 抛出“无法将哈希转换为整数”
assigned_specialist = User.specialists.legal_for(coach_section).experienced_in(critique.discipline_id).first(:order => "RANDOM()")
return assigned_specialist.id
第二次尝试,使用这里讨论的偏移方法。还会导致“无法将哈希转换为整数”
legal_specialists = User.specialists.legal_for(coach_section).experienced_in(critique.discipline_id)
offset = rand(legal_specialists.count)
assigned_specialist = legal_specialists.first(:offset => offset)
return assigned_specialist.id
最后一次尝试,使用数组样本方法,该方法有效但似乎很糟糕。
legal_specialists = User.specialists.legal_for(coach_section).experienced_in(critique.discipline_id)
assigned_specialist = legal_specialists.sample
return assigned_specialist.id
平心而论,系统中只有大约 20 名专家,因此阵列采样方法可能永远不会造成任何问题,但我仍然想了解这里发生了什么。
编辑:这是我定义的范围:
scope :specialists, where(:role_id => 2)
scope :legal_for, lambda { |coach_section| where("section_id != ?", coach_section) }
scope :experienced_in, lambda { |discipline_id|
discipline = Discipline.find(discipline_id)
discipline.users
}