友達に基づいてユーザーに合わせてパーソナライズされたスコアリングアルゴリズムでソートされたユーザーに結果を返したいです。コンテキストとして、私のアプリでは、ユーザーはカレンダーに追加できるイベントを持っています。Myeventsは、ユーザーとイベントの間の結合テーブルです。イベントへの参加者の総数と、そのイベントに参加しているユーザーの友達の数に基づいてスコアを計算したいと思います。
私はこのようなことをしたい:
class Event < ActiveRecord::Base
after_initialize :calculate_score
attr_accessor :score
def calculate_score(user_id)
User.find_by_id(user_id).friends.each do |friend|
if @id = Myevents.find_by_user_id_and_flier_id(friend.id, self.id)
friends_attending_list << @id
end
end
friends_attending_count = friends_attending_list.count
total_attendees_count = Myevents.where(:flier_id => self.id, :attending_status => "1").count
self.score = 100*(friend_attending_count) + 50*(total_attendees_count)
end
end
残念ながら、セッションのuser_idをモデルに渡す良い方法が見つかりません。理想的には、MVCに違反したくないのですが、この計算されたスコアで結果を並べ替えることができます。何かアドバイス?