2010-12-16 120 views
1

我使用Ruby on Rails 3以YouTube「喜歡」和「不喜歡」和Digg風格爲我們的網站創建了一個投票功能。我遇到了問題方案。喜歡/不喜歡風格投票Rails數據庫

我有三個模型,用戶,主題和投票。每個用戶將爲一個主題做一個「贊」或「不喜歡」的投票。像這些網站一樣,用戶可以對主題投票,但他們也可以創建新主題。我希望不僅能夠查看所有用戶的投票,還能夠查看他們創建的主題和他們投票的主題。我正在嘗試自行構建,並決定如何最好地設置數據庫來處理此過程。

我的第一個想法就是使用:的has_many和belongs_to的完全是這樣的...

類用戶<的ActiveRecord :: Base的

的has_many:票

的has_many:主題

類主題< ActiveRecord :: Base

has_many:votes

belongs_to的:用戶

類投票<的ActiveRecord :: Base的

belongs_to的:主題

belongs_to的:用戶

布爾選擇#tracks用戶是否選擇喜歡或不喜歡

但很明顯,這可能不是實現這一目標的最佳方式。我開始認爲最好的方法是使用一個:的has_many:通過關聯像...

類用戶<的ActiveRecord :: Base的

的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