Hash with prompt IDs as keys and item IDs for that prompt as values.
16: def prompts(question_id, voter_id, count)
17: result = ActiveRecord::Base.connection.execute(
18: "SELECT id,score FROM stats WHERE question_id=#{question_id} ORDER BY score;"
19: )
20:
21: return nil unless result.num_rows > 2
22:
23: prompt_item_ids = {}
24: norm = cur = 0
25: stats = []
26: stat = result.fetch_hash
27: min = stat['score'].to_f.abs + 1
28: while !stat.nil?
29: norm += (adj = stat['score'].to_f + min)
30: stats << [stat['id'].to_i, [cur, cur += adj]]
31: stat = result.fetch_hash
32: end
33: result.free
34: Prompt.transaction do
35: count.times do |i|
36: prompt = prompt_for_request(question_id, voter_id, ID)
37:
38: r = rand(norm)
39:
40: stat_id = stats.detect { |stat| stat[1][0] <= r && r < stat[1][1] }[0]
41: item_ids = Stat.find(stat_id).item_ids
42: prompt.item_ids = item_ids
43: redo if bad_prompt?(prompt)
44: prompt_item_ids[prompt.id] = item_ids
45: end
46: end
47: prompt_item_ids
48: end