2010-12-16 5 views
1

YouTube의 "좋아요"와 "싫어함"스타일로 Ruby on Rails를 사용하여 웹 사이트 투표 기능을 만들고 있습니다. 3. 문제가 발생했습니다. 계획.스타일 싫어요/스타일 싫어요 투표 중 데이터베이스

세 가지 모델, 사용자, 주제 및 투표가 있습니다. 각 사용자는 하나의 주제에 대해 "좋아요"또는 "싫어하는"투표를합니다. 이러한 사이트와 마찬가지로 사용자는 주제에 투표 할 수 있지만 새로운 주제를 만들 수도 있습니다. 저는 모든 사용자 투표를 볼 수있을뿐만 아니라 그들이 작성한 주제와 투표 한 주제를 모두 볼 수 있기를 바랍니다. 나는 이것을 스스로 구축하고이 프로세스를 처리하기 위해 데이터베이스를 설정하는 최선의 방법을 결정하려고 노력 중이다.

내 첫번째 생각은 사용했다 : has_many와 belongs_to 독점적으로

클래스 사용자 < 액티브 ... 그래서 같은 : 자료

has_many : 투표

has_many : 주제

클래스 주제 < 액티브 레코드 ::베이스

has_many : votes

belongs_to : 사용자

클래스 투표 < 액티브 :: 자료

belongs_to : 주제

belongs_to : 사용자 사용자가 같이 선택하거나 싫어하는 여부를

부울 선택 #tracks

그러나 이것은 이것이 최선의 방법이 아님을 알게되었습니다.

클래스 사용자 < 액티브 :: 자료 ... 협회 등을 통해

has_many를 : has_many : 나는 가장 좋은 방법은을 사용하는 것입니다 생각하기 시작 투표를 : 주제

=>를 통해 그러나 나는 확실하지 않다. 이처럼 뭔가를 설정하는 최선의 방법에 대한 아이디어가 있습니까?

답변

0

귀하의 초기 설정은 좋다고 생각하지만 귀하가 성취하고자하는 것을 더 잘 지원할 수 있도록 개선 될 수 있습니다. 아마도 다음과 같습니다.

class User < ActiveRecord::Base 
    has_many :votes 
    has_many :topics 

    #Lists all topics the user has voted on 
    has_many :voted_topics, :through => :votes, :source => :topic 

    #Lists all votes for the users topics 
    has_many :topic_votes, :through => :topics, :source => :votes 
end 

class Topic < ActiveRecord::Base 
    has_many :votes 
    belongs_to :user 
end 

class Vote < ActiveRecord::Base 
    belongs_to :topic 
    belongs_to :user 
end 
관련 문제