2010-12-16 15 views
1

Ruby on Rails 3を使用してYouTubeの「好き」と「嫌い」のスタイルで当サイトの投票機能を作成しています。スキーム。Like /嫌いスタイルRailsの投票データベース

私は3つのモデル、ユーザー、トピック、および投票を持っています。各ユーザーは、1つのトピックについて「好き」または「嫌い」という1つの投票を行います。これらのサイトのように、ユーザーはトピックに投票できますが、新しいトピックを作成することもできます。私はすべてのユーザーの投票だけでなく、作成したトピックと投票したトピックの両方を見ることができるようにしたいと考えています。私はこれを独自に構築しようとしており、このプロセスを処理するためのデータベースの設定方法を決定しています。

は私の最初のアイデアは、使用していた:排他的にそうようにhas_manyとbelongs_toの...

クラスのユーザー<はActiveRecord ::ベース

にhas_many:投票

にhas_many:トピック

クラスのトピック< ActiveRecord :: Base

has_many:votes

belongs_toの:ユーザー

クラス投票<はActiveRecord ::ベース

belongs_toの:トピック

belongs_toの:ユーザーユーザーが同じように選ぶか嫌いか

ブール選択肢#tracks

しかし、これがこれを行う最良の方法ではないことが明らかになった。私は最善の方法を使用することだと思うようになった:has_manyの:のような団体を通じて...

クラスのユーザー<はActiveRecord ::ベース

に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 
関連する問題