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 回答