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를 위반하지 싶습니다 하지만이 계산 된 점수로 결과를 정렬 할 수 있기를 원합니다. 어떤 충고?

답변

3

첫째, 규모, 당신은 어딘가에이 점수를 캐시해야합니다. 이 방법은 여기에 매우 비쌀 것입니다. 그러나 이벤트 당 사용자 당 점수이기 때문에 간단한 문제는 아닙니다.

가 나는 경우에 점수를 저장하는 것이 합리적 방법을 볼니까.

공연의 생각없이, 나는 당신이 필요로하는 곳이 호출 할 수있는 사용자 모델에 score_for_event(event) 방법이있을 것입니다.

+0

안녕하세요 Robin - 답변 해 주셔서 감사합니다. 이 매개 변수를 기반으로 이벤트를 정렬 할 수 있기를 원했기 때문에이를 이벤트에 저장했습니다. 대신 User 모델에 저장하면 동일한 작업을 수행 할 수 있습니까? 또한 캐싱을 말할 때 (미안하지만 이것은 첫 번째 앱 중 하나입니다), 실제로 캐싱을 수행하거나 실제로 DB에 저장하는 것을 의미합니까? –

+0

오른쪽 ... 정렬에 관한 부분을 잊어 버렸습니다 ... 사용자 캘린더의 이벤트에 대해서만 점수가 필요한 경우이 점수를 Myevents 모델에 저장할 수 있으며 문제가 쉽게 발생합니다. 새 사용자가 이벤트에 참석할 때마다 (배경 작업으로)이 점수를 업데이트해야합니다. – Robin

관련 문제