2011-03-17 4 views
1

그래서 모델을 생성하는 위/아래 투표 메커니즘을 구현하고 있습니다. 지금까지 나는 비디오 (투표 대상)에 하나의 vote_count가 있고 vote_count는 비디오에 속한다는 것을 알고 있습니다. 그러나 나는 또한 내 vote_count 데이터베이스에서 비디오에 투표 한 사용자를 추적하려고합니다. 즉, vote_count에 많은 사용자가 있고 사용자가 vote_count에 속해 있습니까?모델 연관 질문

답변

5

이와 같은 독립적 인 기록으로 표를 추적하는 것이 더 쉬울 수 있습니다

class VideoVote < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :video 
end 

class User < ActiveRecord::Base 
    has_many :video_votes 
    has_many :voted_videos, 
    :through => :video_votes, 
    :source => :video 
end 

class Video < ActiveRecord::Base 
    has_many :video_votes, 
    :counter_cache => true 
    has_many :voted_users, 
    :through => :video_votes, 
    :source => :user 
end 

당신은 사람들이 아래로 투표를하고있는 경우

, 당신은 어떻게 든 그물 투표 총을 추적해야합니다. 이것은 까다로울 수 있으므로 투표 플러그인을 찾고 싶을 수 있습니다.

+1

+1. 나는 같은 글을 쓰는 중간에 있었다. 당신이 묘사 한 @Justin은 사용자가 하나의 비디오에만 투표하도록 허용합니다. (a) 어느 사용자가 어떤 비디오에 투표했는지, (b) 투표 한 방법 (위 또는 아래) 및 (잠재적) (c)를 추적해야합니다. – Nuby

+0

감사! ': counter_cache => true'는 무엇입니까? –

+0

또 다른 두 가지 : 1. 반드시 has_many : videos를 사용자 모델에 추가하고 belongs_to : user를 비디오 모델에 추가해야합니까? 그리고 두 번째로 컨트롤러에서 하나의 upvote 메서드와 하나의 downvote 메서드를 만들겠습니까? –

-1

여기에 뭔가가 빠졌습니까? netVoteTallyVideos의 속성으로 할당하는 것이 좋습니다. video.new이 호출되고 비디오 메서드 외부에서 액세스 할 수있는 incNetVideoTallydecNetVideoTally 메서드가 있으면 0으로 초기화 하시겠습니까? 단지 $ 0.02.

+0

어떤 사용자가 비디오를 투표했는지 알고 싶기 때문에 풍부한 다 대다 연관이있는 자체 모델이 필요합니다. 또한 비디오에 투표 한 모든 사용자 또는 유권자가 투표 한 모든 비디오와 같이 사용자에게 표시 할 수있는 여러 가지 사항에 대해 최대한의 유연성을 제공합니다. –

+0

나는이 스레드의 잘못된 지점에 내 대답을 넣은 것 같습니다. 나는 그 자신의 좋은 대답에 대한 tadman의 의견에 더 많은 반응을 보였습니다. 여기서 그물 투표 총계를 추적하는 것이 까다로울 수 있다고 언급했습니다. 사과. –