ランダムなレコードを選択しようとしていますが、唯一の有効な方法は、パフォーマンスの問題がひどいようです。
PostgresのRANDOM関数を使用した最初の試み-「ハッシュを整数に変換できません」をスローします
assigned_specialist = User.specialists.legal_for(coach_section).experienced_in(critique.discipline_id).first(:order => "RANDOM()")
return assigned_specialist.id
ここで説明するオフセット方法を使用した2回目の試行。また、「ハッシュを整数に変換できません」を引き起こします
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
}