【问题标题】:Scoring Algorithm in Model using a session variable in rails使用rails中的会话变量在模型中评分算法
【发布时间】:2012-08-08 17:43:14
【问题描述】:

我想将结果返回给按评分算法排序的用户,该评分算法根据用户的朋友个性化。就上下文而言,在我的应用程序中,用户可以将事件添加到他们的日历中。 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,但我希望能够通过这个计算的分数对结果进行排序。有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails algorithm session rails-activerecord scoring


    【解决方案1】:

    首先,要扩展,您需要将此分数缓存在某个地方。这种方法在这里会非常昂贵。但这不是一个简单的问题,因为它是每个用户每个事件的分数。

    我不明白将分数存储在事件中有何意义。

    不考虑性能,我会在 User 模型上有一个 score_for_event(event) 方法,你可以在任何需要的地方调用它。

    【讨论】:

    • 嗨罗宾--感谢您的回复!我将它们存储在事件中是因为我希望能够根据此参数对事件进行排序。如果我将它存储在 User 模型上,我可以这样做吗?另外,当您说缓存它(抱歉,这是我的第一个应用程序之一)时,您是指缓存操作还是将其实际存储在数据库中?
    • 对...我忘记了关于排序的部分...如果您只需要用户日历中的事件的分数,那么您可以将此分数存储在 Myevents 模型中,它会使你的问题更容易。每当有新用户参加活动(作为后台作业)时,您都需要更新此分数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    相关资源
    最近更新 更多