2014-04-24 3 views
0

내 응용 프로그램에서 평판 시스템을 구현하려고합니다 (stackoverflow와 유사). 나는 그 옆에있는 명성 점수에 최근에 추가되거나 뺀 것을 보여줄 수 있기를 원합니다. 이러한 구현을 수행하는 가장 좋은 방법은 무엇입니까? 예를 들어 평판 점수레일 : (숫자) 차이점을 어떻게 일시적으로 보여 줍니까?

: 150 10 또는 평판 점수 : 150 -20

지금 내가 생각할 수있는 유일한 방법은 다른 열/필드라는 temporary_reputation을 만들고 거기에 가장 최근 추가/빼기를 ​​유지하다 . 그런 다음 20-30 분마다 해당 열을 지우는 크론을 만들 수 있습니다. 캐시로 뭔가 할 수 있을까요?

+0

귀하의 질문 2 개 질문으로 더 많은 것 : 예

는 ... "표시 방법"과, "어떻게 .../저장을 모델링하기 위해"하는 제 의견에는 두 가지 질문이 있습니다. 너 더 관심있어? 그런 다음 자신 만의 질문을 편집하여 그 중 하나만 묻습니다 ... (둘 다 흥미 롭습니다 만, 명확하게하기 위해 하나만 부탁합니다). – mliebelt

+0

버전 관리를 사용하여 평판 모델에 수행 된 모든 변경 사항을 저장하고 쉽게 기록을 탐색 할 수 있습니다. – Robin

+0

@mliebelt 저장 방법과 관련된 데이터를 표시하는 방법이 아닙니까? 내가 필요로하고 문제를 해결하는 방법을 알아 내려고 노력했다. 데이터를 저장/표시하면 대답을 결정하는 방법을 설정하지 않았습니다. – echan00

답변

0

당신이 제안한 것이 문제를 해결하지 못할 것이라고 생각합니다. ScoreChange

  • 타임 스탬프

하고 필요한 관계를 갖게됩니다

나는 여분의 모델 예를 구현 선호 할 것입니다.

이렇게 평판 점수가있는 각 항목에 대해 score 필드를 합한 다음 원하는 모든 변경 사항을 표시 할 수 있습니다.

class Item < ActiveRecord::Base 

has_many :score_changes 

def last_changes(n) 
    score_changes.last_changes_sum(n) 
end 

def score_with_last_change(n = 3) 
    [score, last_changes(n)] 
end 

class ScoreChange < ActiveRecord::Base 
    belongs_to :item 

    def self.last_changes_sum(n) 
    order('timestamp desc').limit(n).pluck(:value).inject(&:+) 
    end 
end 
관련 문제