0

友達に基づいてユーザーに合わせてパーソナライズされたスコアリングアルゴリズムでソートされたユーザーに結果を返したいです。コンテキストとして、私のアプリでは、ユーザーはカレンダーに追加できるイベントを持っています。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に違反したくないのですが、この計算されたスコアで結果を並べ替えることができます。何かアドバイス?

4

1 に答える 1

3

まず、スケーリングするには、このスコアをどこかにキャッシュする必要があります。ここでのこの方法は非常に費用がかかります。しかし、それはイベントごとのユーザーごとのスコアであるため、単純な問題ではありません。

イベントにスコアを保存することがどのように意味があるのか​​わかりません。

パフォーマンスを考えずに、score_for_event(event)必要な場所で呼び出すことができるUserモデルのメソッドがあります。

于 2012-08-11T23:38:34.237 に答える