1

Ruby on Rails 3 を使用して、YouTube の「いいね」と「嫌い」と Digg のスタイルで、Web サイトの投票機能を作成しています。適切なスキームを考え出すのに苦労しています。

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

私の最初のアイデアは、:has_many と belongs_to を排他的に使用することでした…</p>

クラス User < ActiveRecord::Base

has_many :votes

has_many :トピック

class Topic < ActiveRecord::Base

has_many :votes

所属先:ユーザー

class Vote < ActiveRecord::Base

所属先:トピック

所属先:ユーザー

boolean choice #ユーザーが好きか嫌いかを追跡します

しかし、これが最善の方法ではない可能性があることが明らかになりました。:has_many :through アソシエーションを使用するのが最善の方法だと思い始めました...

クラス User < ActiveRecord::Base

has_many :votes, :through => :topics

確信はないけど。このようなものを設定する最善の方法についてのアイデアはありますか?

4

1 に答える 1

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
于 2010-12-16T03:19:31.143 に答える